무료로 SSL 인증서를 배포하는 wosign(회원가입 필요)에서 인증서를 생성해 Tomcat 서버에 적용하는 과정에서 몇 번의 삽질 끝에 성공한 절차를 기록해본다.



1. 개인키 파일 생성

# keytool -genkey -keyalg RSA -sigalg SHA1withRSA -alias mySSL -keysize 2048 -keystore mySSL.jks


키 저장소 비밀번호 입력:  

새 비밀번호 다시 입력: 

이름과 성을 입력하십시오.

  [Unknown]:  Finkle

조직 단위 이름을 입력하십시오.

  [Unknown]:  Finkle

조직 이름을 입력하십시오.

  [Unknown]:  RND

구/군/시 이름을 입력하십시오?

  [Unknown]:  Seoul

시/도 이름을 입력하십시오.

  [Unknown]:  Seoul

이 조직의 두 자리 국가 코드를 입력하십시오.

  [Unknown]:  KR

CN=Finkle, OU=Finkle, O=RND, L=Seoul, ST=Seoul, C=KR이(가) 맞습니까?

  [아니오]:  y


<mySSL>에 대한 키 비밀번호를 입력하십시오.

(키 저장소 비밀번호와 동일한 경우 Enter 키를 누름):  

새 비밀번호 다시 입력:


2. 생성된 파일 확인

# keytool -list -keystore mySSL.jks 


3. CSR 생성

# keytool -certreq -alias mySSL -keyalg RSA -sigalg SHA1withRSA -file mySSL.csr -keystore mySSL.jks

키 저장소 비밀번호 입력: 


4. https://buy.wosign.com/free/ 접속 후 위에서 생성한 CSR 파일 내용 붙여넣기


5. zip 파일 다운로드

mydomain.co.kr_sha256_en.zip


6. 압축 파일 내 [for Other Server.zip] 파일의 내용 추출 후 적용대상 서버에 업로드

root.crt

1_cross_Intermediate.crt

2_issuer_Intermediate.crt

3_user_mydomain.co.kr.crt


7. Tomcat에 적용할 정보 키스토어 파일에 적용

# keytool -import -trustcacerts -alias WoSignROOT -file root.crt -keystore mySSL.jks

# keytool -import -trustcacerts -alias CrossINTER -file 1_cross_Intermediate.crt -keystore mySSL.jks

# keytool -import -trustcacerts -alias IssuerINTER -file 2_issuer_Intermediate.crt -keystore mySSL.jks

# keytool -import -alias mySSL-file 3_user_mydomain.co.kr.crt -keystore mySSL.jks



8. 내용 확인

# keytool -list -v -keystore mySSL.jks


9. 톰캣 설정 파일 변경

$ vi server.xml

<Connector port="443" protocol="HTTP/1.1"

       maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

       clientAuth="false" sslProtocol="TLS" 

       keystoreFile="/home/path/tools/ssl/mySSL.jks" keystorePass="xxxx" />


10. 톰캣 재기동

10여년간 오라클만 쓰다가 오랜만에 MySQL 사용할려니 넘어야 할 산이 계속 생기네.


아래 주소 참고해서 해결함


http://www.mysqlkorea.com/sub.html?mcode=manual&scode=01_1&m_no=22396&cat1=753&cat2=802&cat3=938&lang=k


http://egloos.zum.com/ndba/v/3437272



아래와 같은 SQL을 실행할 때

INSERT INTO T_NAME (

    ID,        NAME, ORDER_NO

)

VALUES (

    #{id},      #{name},

    (

    SELECT IFNULL(MAX(ORDER_NO), 0) + 1

      FROM T_NAME

     WHERE ID = #{id}

    )

)


SQL 오류 (1093): Table 'T_NAME' is specified twice, both as a target for 'INSERT' and as a separate source for data 와 같은 오류가 발생한다면 ....


INSERT INTO T_NAME (

    ID,        NAME, ORDER_NO

)

VALUES (

    #{id},      #{name},

    (

    SELECT IFNULL(MAX(ORDER_NO), 0) + 1

      FROM T_NAME ALIAS_FOR_SUBQUERY

     WHERE ID = #{id}

    )

)

위와 같이 서브쿼리 대상 테이블에 별명(alias)을 주면 해결된다.


오라클에서는 동일 테이블 내에서의 서브쿼리 조합이 가능하지만 MariaDB(or MySQL)는 기본적으로 지원하지 않는 것 같다.

MyBatis + MariaDB(or MySQL) 사용 시 select 결과가 resultType으로 지정한 Class에 바인딩(맵핑)이 안된다.


<mapper namespace="_mgr">

    .... 생략 ....

    <select id="view" resultType="mgrBean" parameterType="string">

        SELECT MGR_ID AS mgrId,

                  MGR_NM AS mgrNm

                  .... 생략 ....

          FROM CO_MGR

        WHERE MGR_ID = #{mgrId}

    </select>

    

    ....


위에서 'view' id를 갖는 쿼리문의 실행결과는 resultType으로 지정한 mgrBean이라는 alias로 지정된 클래스의 멤버변수에 자동으로 바인딩(맵핑) 되어야 하는데 일부 칼럼은 되고, 일부 칼럼은 안되는 경우가 발생했다.


구글신에게 물어봐도 답을 못찾아서 이것 저것 설정 파일을 건드리다가 아래와 같이 해결했다.

(구글이 못찾을 경우의 대부분은 내가 만난 문제가 매우 지엽적인 경우이다. 따라서 내 환경에 문제가 있을 가능성이 높다)


[myBatis 설정파일]


<configuration>

    .... 생략 ....

    <setting name="useColumnLabel" value="true" />


    ....


DB 칼럼명 대신에 칼럼라벨을 대신 사용하겠다는 설정이며 디폴트 값은 true이다.


이전에 오라클을 사용하면서 저 값을 fasle로 설정한 후 문제가 없었기에 다른 DB에서도 당연히 정상 동작하는 줄 알았는데 MariaDB를 사용하니 문제가 발생했다.


JDBC 드라이버 바꿔가면서 1시간 정도 삽질한 기념으로, 본 시행착오를 글로 남겨본다.




503 에러는 사용자 폭주시 일시적으로 발생하는 에러라고 구글이 알려줌.


그러나 나에게 주어진 상황은 이와 달라 원인찾는데 애먹음.


현상 : 

특정 페이지를 방문한 후 다른 페이지를 방문할 시 503 에러가 발생함

다른 페이지에서 방문할 경우는 이상 없음


원인 :

해당 페이지 내  삽입된 이미지에서 404 에러 발생 후 타 페이지 이동시 발생하는 현상으로 파악됨


조치 :

이미지에서 200 코드 나오도록 수정함



※ 톰캣에서는 정상이나 제우스에서만 발생하는 현상이라 원인찾기 힘들었음. 아마 웹투비 쪽 설정상의 문제가 아닐까 추정함.




+ Recent posts