SSL 설정법

Background

  • startssl 무료 인증서를 기준으로 설명합니다.

 

Startssl 인증서 받기

  1. startssl.com에 가입합니다.
  2. validations wizard를 클릭하고 진행합니다.
    1. 어떤 도메인에 대해 ssl을 발급받을지, 도메인이 실존하는지 확인하는 과정입니다.
  3. certification wizard를 클릭하고 진행합니다.
    1. private key를 받아서 잠시 저장해둡니다.
    2. certification 파일도 받아서 잠시 저장해둡니다.
    3. subdomain 설정은 www로 해야 www.~.com과 ~.com을 같이 사용할 수 있습니다.
  4. startssl의 ca.pem 파일을 받아 저장해둡니다.
    1. http://www.startssl.com/certs/ca.pem
    2. http://www.startssl.com/certs/sub.class1.server.ca.pem
  5. toolbox에 들어가 Create PKCS#12 (PFX) File 를 선택합니다.
    1. 3-a, 3-b에서 받았던 키와 입력했던 암호를 넣고
    2. .p12 파일을 다운받습니다.

Keystore 설정

자바 JDK에 포함된 %JAVA_HOME%/bin/keytool 을 사용합니다. 

  1. keystore를 생성합니다. (tomcat이란 초기 키를 생성합니다. 사용할 일은 없습니다.)
    1. keytool -genkey -alias tomcat -keyalg RSA -keysize 2048 -keystore (path to keystore) 
  2. startssl의 인증 파일을 추가합니다.
    1. keytool -import -alias startcom.ca -keystore (path to keystore) -trustcacerts -file (path to ca.pem)
    2. keytool -import -alias startcom.ca.sub -keystore (path to keystore) -file (path to sub.class1.server.ca.pem)
  3. startssl에서 받은 p12 파일을 추가합니다.
    1. keytool -v -importkeystore -srckeystore (path to p12) -srcstoretype PKCS12 -destkeystore (path to keystore) -deststoretype JKS

 

Tomcat에 keystore 설정하기

tomcat conf의 server.xml에 Connector 설정을 수정합니다.

<Connector  port="8443" 
        maxThreads="200" scheme="https"  
        secure="true" SSLEnabled="true" 
        
keystoreFile="${user.home}/.keystore" keystorePass=“키스토어비밀번호" 
        
clientAuth="false" sslProtocol="TLS”/>

keystoreFile 항목을 keystore의 위치로 수정하거나, 만들어진 keystore파일을 tomcat이 접근 가능한 위치로 옮깁니다.

이제 톰캣을 실행시키고 localhost:8443으로 접속했을때, domain이 맞지 않다고 에러페이지가 보이고, 접속을 감행했을 때 톰캣이 뜨면 성공입니다.

 

nginx 설정하기

보안을 위해 80과 443포트만 열어둔 경우, 톰캣으로 리다이렉션해주는 설정을 해야 한다.

nginx.conf에 아래와 같은 설정을 추가합니다.

server {
  listen 80;
  server_name (your domain);
  return 301 https://$server_name$request_uri;
}

server {
  listen 443;
  server_name (your domain);

  ssl on;
  ssl_certificate (path to certification file)
  ssl_certificate_key (path to certification key file)

  location / {
    proxy_pass https://localhost:8443;
    index index.html;
  }
}

Tomcat에서 redirect 설정하기

http://tkurek.blogspot.kr/2013/07/tomcat-7-http-to-https-redirect.html

톰캣 기본 설정은 HTTP를 위해 8080 포트를,

HTTPS를 위해 8443 포트를 사용합니다.

 

톰캣에서 8080으로 들어오는 요청을 8443으로 돌리는 방법은 다음과 같습니다.

server.xml 업데이트

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           URIEncoding="UTF-8"
           redirectPort="8443" />
8080 포트 설정을 아래와 같이 바꿉니다.
<Connector port="8080" enableLookups="false"
           redirectPort="8443" />

web.xml 업데이트

</web-app> 끝나는 태그 직전에 아래의 마크업을 붙여넣습니다.

<security-constraint>
  <web-resource-collection>
    <web-resource-name>Protected Context</web-resource-name>
    <url-pattern>/*</url-pattern>
  </web-resource-collection>
  <!-- auth-constraint goes here if you requre authentication -->
  <user-data-constraint>
    <transport-guarantee>CONFIDENTIAL</transport-guarantee>
  </user-data-constraint>
</security-constraint>

 

 

<span id="pageNum"/>