Tomcat SSL 인증서 설치/적용 가이드

사전 구성 환경

  • Java JDK or JRE http://www.java.com/
  • TLS / SHA-2(sha256) 암호화 지원 모듈 구성/활성 확인 필수
  • MD5, RC4 등 국제 보안 기구에서 해제를 권장하는 취약한 암호화 모듈 비활성화

진행 과정

  1. 키스토어 생성
  2. CSR(Certificate Signing Request) 생성
  3. 인증서 발급 신청 제출
  4. 인증서 설치 적용
  5. 정상 적용 완료 테스트

키스토어 생성

- 본 과정은, 인증서 신청서 작성시 CSR 자동생성 이용을 권장합니다. ".pfx / .jks / .key" 파일이 제공됩니다.
- 제공되는 ".pfx / .jks" 에는 "개인키+서버인증서+체인인증서+루트인증서" 가 모두 통합되어 있습니다.
keytool -genkey -keyalg RSA -sigalg SHA256withRSA -alias SecureSign -keysize 2048 -keystore domain.jks
  • -keyalg : 키알고리즘으로 RSA 을 지정합니다
  • -sigalg : 서명알고리즘으로 SHA256 을 지정합니다.
  • -alias : 대체 이름으로 영문 단어를 지정하며, 특수문자등은 사용하지 않아야 합니다.
  • -keystore : 개인키 파일

Result

keystore 암호를 입력하십시오: (6자이상)
새 암호를 다시 입력하십시오:
이름과 성을 입력하십시오. (인증서 도메인 입력)
[Unknown]: www.securesign.kr
조직 단위 이름을 입력하십시오.
[Unknown]: dept
조직 이름을 입력하십시오.
[Unknown]: my company
구/군/시 이름을 입력하십시오?
[Unknown]: seocho
시/도 이름을 입력하십시오.
[Unknown]: seoul
이 조직의 두 자리 국가 코드를 입력하십시오. (대문자)
[Unknown]: KR
CN=www.securesign.kr, OU=dept, O=my company, L=seocho, ST=seoul, C=KR(가) 맞습니까?
[아니오]: y

<SecureSign> (alias명)
에 대한 키 암호를 입력하십시오. enter (keystore 암호와 key 암호는 동일하게 설정 권장)
(keystore 암호와 같은 경우 Enter를 누르십시오):

Wildcard

CN : *.example.com 과 같은 패턴 이어야 합니다.

MultiDomain

CN : example.com 대표성을 가진 도메인 1개만 입력 합니다. 포함될 나머지 도메인 목록은 신청서에 별도 입력합니다.

CSR(Certificate Signing Request) 생성

본 과정은, 인증서 신청시 CSR 자동생성 이용을 권장합니다
keytool -certreq -alias SecureSign -keyalg RSA -sigalg SHA256withRSA -file SecureSign.csr -keystore domain.jks
  • -keyalg : 키알고리즘으로 RSA 을 지정합니다
  • -sigalg : 서명알고리즘으로 SHA256 을 지정합니다.
  • -alias : 대체 이름으로 영문 단어를 지정하며, 특수문자등은 사용하지 않아야 합니다.
  • -keystore : 개인키 파일
  • -file : CSR 저장할 파일

Result

keystore 암호를 입력하십시오: enter

생성된 CSR 예제

본 과정은, 인증서 신청시 CSR 자동생성 이용을 권장합니다
-----BEGIN CERTIFICATE REQUEST-----
MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAktSMQ4wDAYDVQQIEwVTZW91bDERMA8G
A1UEBxMIR2FuZy1uYW0xGDAWBgNVBAoTD1NlY3VyZUxheWVyIEluYzERMA8GA1UE
-- 중략 --
wxd+87gwsvAC2dyK8I4N1ttXDRJcDPCDe1BGqWvYYAZN7FbvnbHCM7y/SN++pxbS
jbnkoe8uStQvfCo6DW5MZHUli5+lRU/UpA==
-----END CERTIFICATE REQUEST-----

앞서 생성한 CSR 파일은 Base64 포맷의 PEM Text 이며, 텍스트 편집기를 이용하여 파일을 오픈합니다. -----BEGIN ~ REQUEST----- 까지 포함하여 내용 전체를 복사하여 신청서에 입력합니다. (----- 를 누락하거나, 새로운 빈출이 추가되지 않도록 주의하세요)

서버 인증서 조합 (CSR 직접 생성시)

  • keytool -import -trustcacerts -alias AddTrustExternalCARoot -file AddTrustExternalCARoot.crt -keystore domain.jks
  • keytool -import -trustcacerts -alias COMODORSAAddTrustCA -file COMODORSAAddTrustCA.crt -keystore domain.jks
  • keytool -import -trustcacerts -alias COMODORSACA -file COMODORSADomainValidationSecureServerCA.crt -keystore domain.jks
  • keytool -import -trustcacerts -alias SecureSign -file domain_xxxxx.crt.pem -keystore domain.jks

* 개인키가 CSR 생성 서버에만 - CSR 직접 생성 - 존재하는 경우에, 개인키에 발급된 서버/체인/루트 통합합니다.
* 루트/체인 인증서는 상품별로 차이가 있으므로, 발급 완료시 첨부된 파일 내역에서 확인 가능합니다.
* CSR 자동생성 신청의 경우, .pfx / .jks 포맷 파일을 제공해 드리며 파일에 모두 통합되어 있습니다. (조합 과정 불필요)

Server.xml - JavaKeyStore 적용 예제

Tomcat 4+
<Connector
port="443" scheme="https" secure="true" SSLEnabled="true"
keystoreFile="인증서경로/domain.jks 파일" keystorePass=".jks 패스워드"
sslProtocol="TLS"
/>

* JavaKeyStore(.jks) 는, [CSR 자동생성] 신청시 개인키+서버인증서+체인인증서+루트인증서가 포함되어 있습니다.
* 예제 xml 에 포함되어 있지 않은 나머지 Property 는 공식 매뉴얼 또는 서버 설정값을 사용하시기 바랍니다.

Server.xml - PFX 적용 예제

Tomcat 4+
<Connector
port="443" SSLEnabled="true"
scheme="https" secure="true" sslProtocol="TLS"
keystoreFile="인증서경로/domain_xxxxx.pfx" keystorePass="pfx암호" keystoreType="PKCS12"
/>

* pfx 포맷은, [CSR 자동생성] 신청시 개인키+서버인증서+체인인증서+루트인증서가 포함되어 있습니다.
* 예제 xml 에 포함되어 있지 않은 나머지 Property 는 공식 매뉴얼 또는 서버 설정값을 사용하시기 바랍니다.

Server.xml - APR 환경 적용 예제 Apache Portable Runtime

Tomcat 5.5+
<Connector
port="443" SSLEnabled="true"
scheme="https" secure="true" sslProtocol="TLS" SSLEngine="on"
SSLPassword="개인키 암호"
SSLCertificateKeyFile=/인증서파일경로/개인키 ex. domain_xxxxx.key.pem
SSLCertificateFile=/인증서파일경로/서버인증서 ex. domain_xxxxx.crt.pem
SSLCertificateChainFile=/인증서파일경로/체인인증서ex. chain-bundle.pem
SSLCACertificateFile=/인증서파일경로/루트인증서 ex. AddTrustExternalCARoot.crt
/>

* 루트/체인 인증서는 상품별로 차이가 있으므로, 발급 완료시 첨부된 파일 내역에서 확인 가능합니다.
* AprLifecycleListener 리스너 구성 및 SSLEngine 활성화가 되어 있는지 미리 확인하시기 바랍니다.
* 예제 xml 에 포함되어 있지 않은 나머지 Property 는 공식 매뉴얼 또는 서버 설정값을 사용하시기 바랍니다.

주요 이슈 사항