Apache Http Server 나 Nginx 에서 사용하던 인증서를 Tomcat 에서 사용하려고 보니 바로 적용이 안되군요...
(pkcs12 형식으로 변환이 필요)
위와 같이 체인인증서와 ROOT 인증서가 합쳐저 있는 chainca.crt 와 도메인의 인증서가 있는 mydomain.com.crt 를 하나의 파일로 합쳐 줍니다.
$ cat mydomain.com.crt chainca.crt > mydomain.com.chainca.crtopenssl 을 이용하여 pkcs12 형식으로 변환합니다.
$ openssl pkcs12 -export -in mydomain.com.chainca.crt -inkey mydomain.com.key -out mydomain.com.p12 -name tomcat Enter Export Password: (key 파일 암호입력) Verifying – Enter Export Password: (key 파일 암호입력)정상적으로 변환을 확인하려면 아래 명령어를 이용합니다.
$ keytool -list -v -keystore mydomain.com.p12 -storetype pkcs12$CATALINA_HOME/conf/server.xml
아래와 같이 커넥터를 추가합니다.
<Connector port="{SSL포트}" maxHttpHeaderSize="8192" maxThreads="150" enableLookups="false" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="{인증서 경로}" keystoreType="PKCS12" keystorePass="{인증서 패스워드}"/>해당 포트로 정상적으로 접근하면 설정 완료입니다.
참고자료
- //idchowto.com/?p=13523
- //www.qtrustssl.com/board/view.php?code=faq&cat=&sq=27&page=1&s_fld=&s_txt=
사전 구성 환경
- Java JDK or JRE //www.java.com/ (Java 7 버전 이상, TLS 1.2 지원 필수)
- TLS 1.2 / SHA-2(sha256RSA) 암호화 지원 모듈 구성/활성 확인 필수
- SNI(Server Name Indication, 서버 이름 표시) 기능 지원하는 웹서버 버전 권장 (443공용)
- MD5, RC4 등 국제 보안 기구에서 해제를 권장하는 취약한 암호화 모듈 비활성화
- SSL 2.0, 3.0 및 TLS 1.0 1.1 프로토콜 접속 허용 해제. 최신 TLS 1.2 1.3 설정 권장
진행 과정
- 키스토어 생성
- CSR(Certificate Signing Request) 생성
- 인증서 발급 신청 제출
- 인증서 발급 완료 (발급내역서/파일설명서 PDF 참조)
- 인증서 설치 적용 - 신규,갱신,재발급,도메인추가
- 서버 정상 적용 완료 테스트
- 웹페이지에 // 링크 적용
키스토어 생성 예제
- SSL 인증서 발급 신청서 작성시, CSR 입력 단계에서 "CSR 자동생성" 선택시 현재 과정은 필요 없습니다. (권장)
- CSR 자동생성 발급 완료시, "개인키, 서버인증서, 체인인증서, 루트인증서" 의 pem, pfx, jks, p7b 파일이 포함되어 있습니다.
- FAQ : 개인키(private key)
생성/보관 관련 참고 사항
keytool -genkey -keyalg RSA -sigalg SHA256withRSA -alias SecureSign -keysize 2048 -keystore sslcert.co.kr.jks
- -keyalg : 키알고리즘으로 RSA 을 지정합니다
- -sigalg : 서명알고리즘으로 SHA256 을 지정합니다.
- -alias : 대체 이름으로 영문 단어를 지정하며, 특수문자등은 사용하지 않아야 합니다.
- -keystore : 개인키 파일
- (예제에 사용된 옵션 값 등은 예제용이므로, 실제 해당 도메인 정보로 지정하시기 바랍니다)
(keytool 에 대한 상세 사용법 설명은 자체 매뉴얼을 참조 바랍니다 - SecureSign 에서 설명불가)
Single
CN : sub.example.com 처럼 FQDN 도메인 형식 이어야 합니다.
Wildcard
CN : *.example.com 과 같은 패턴 이어야 합니다.
MultiDomain
CN : example.com 대표성을 가진 FQDN 도메인 1개만 입력 합니다.
SAN : 인증서에 포함될 나머지 FQDN 도메인은, 신청서 작성중 DCV 설정 단계에서 추가 입력합니다.
Multi-Wildcard
CN : example.com 대표 루트 도메인 1개을 CN으로 입력 합니다.
SAN : *.example.com 형식의 와일드카드 도메인은, 신청서 작성중 DCV 설정 단계에서 추가 입력합니다.
Result
keystore 암호를 입력하십시오: (6자이상)
새 암호를 다시 입력하십시오:
이름과 성을 입력하십시오. (인증서 도메인 입력)
[Unknown]: www.securesign.kr
조직 단위 이름을 입력하십시오.
[Unknown]: DevTeam
조직 이름을 입력하십시오.
[Unknown]: SecureSignKR
구/군/시 이름을 입력하십시오?
[Unknown]: Gangnam-gu
시/도 이름을 입력하십시오.
[Unknown]: Seoul
이 조직의 두 자리 국가 코드를 입력하십시오. (대문자)
[Unknown]: KR
CN=www.securesign.kr, OU=DevTeam, O=SecureSignKR, L=Gangnam-gu, ST=Seoul, C=KR(가) 맞습니까?
[아니오]: y
<SecureSign> (alias명)
에 대한 키 암호를 입력하십시오. enter (keystore 암호와 key 암호는 동일하게 설정 권장)
(keystore 암호와 같은 경우 Enter를 누르십시오):
CSR(Certificate Signing Request) 생성 예
- SSL 인증서 발급 신청서 작성시, CSR 입력 단계에서 "CSR 자동생성"
선택시 현재 과정은 필요 없습니다. (권장)
- FAQ : SSL 발급 신청시 CSR 생성 관련 참고 사항
- FAQ : SSL 발급 신청시 도메인 형식 예제 및 참고 사항
keytool -certreq -alias SecureSign -keyalg RSA -sigalg SHA256withRSA -file SecureSign.csr -keystore sslcert.co.kr.jks
- -keyalg : 키알고리즘으로 RSA 을 지정합니다
- -sigalg : 서명알고리즘으로 SHA256 을 지정합니다.
- -alias : 대체 이름으로 영문 단어를 지정하며, 특수문자등은 사용하지 않아야 합니다.
- -keystore : 개인키 파일
- -file : CSR 저장할 파일
Result
keystore 암호를 입력하십시오: enter
생성된 CSR 예제
- SSL 인증서 발급 신청서 작성시, CSR 입력 단계에서 "CSR 자동생성" 선택시 현재 과정은 필요 없습니다. (권장)
-----BEGIN CERTIFICATE REQUEST----- MIIC5TCCAc0CAQAwgZ8xCzAJBgNVBAYTAktSMQ4wDAYDVQQIEwVTZW91bDERMA8G A1UEBxMIR2FuZy1uYW0xGDAWBgNVBAoTD1NlY3VyZUxheWVyIEluYzERMA8GA1UE -- 중략 -- wxd+87gwsvAC2dyK8I4N1ttXDRJcDPCDe1BGqWvYYAZN7FbvnbHCM7y/SN++pxbS jbnkoe8uStQvfCo6DW5MZHUli5+lRU/UpA== -----END CERTIFICATE REQUEST-----앞서 생성한 CSR 파일은 Base64 포맷의 PEM Text 이며, 텍스트 편집기를 이용하여 파일을 오픈합니다. -----BEGIN ~ REQUEST----- 까지 포함하여 내용 전체를 복사하여 신청서에 입력합니다. (----- 를 누락하거나, 새로운 빈출이 추가되지 않도록 주의하세요)
SSL 발급 신청
- GoGetSSL Domain (Sectigo) (₩ 7,000)
- Sectigo PositiveSSL (₩ 9,000) ▶ ₩ 7,000. 22% 할인 프로모션 진행중. 자세히보기
- Sectigo PositiveSSL Wildcard (₩ 120,000)
- Sectigo PositiveSSL Multi-Domain (₩ 49,000)
- RapidSSL Standard (DigiCert) (₩ 24,000)
- 최저가 SSL 인증서 타입 분류별 전체 보기
인증서 발급 완료 및 참고 사항
- 발급 완료 후에는, 메일첨부 또는 주문상세의 압축파일(zip)에 인증서 파일이 포함되어 있습니다.
- 서버 적용에 필요한 파일 정보는, zip 파일내 '발급내역서 및 루트/체인' PDF 에서 확인해야 합니다. (필수)
- 이후 과정 부터는, 서버에 SSL 인증서 설치/적용/확인 절차 입니다. (인터넷에 공개된 설정법과 차이 없음)
- 직접 설치/적용에 어려움이 있다면, 서버운영 전문업체 기술지원도 검토해 보시기 바랍니다
유료기술지원 확인하기
- 서버이름표시(SNI) 지원되는 서버의 경우, SSL 인증서 마다 각 포트 구분없이 모두 443 포트 적용가능합니다.
- SNI 설정으로 하는 경우, 사이트에 접속하는 클라이언트의 호환성을 미리 검토해야 합니다.
서버 인증서 jks 포맷 조합 예 (CSR 직접 생성한 경우)
- SSL 인증서 발급 신청서 작성시, CSR 입력 단계에서 "CSR 자동생성" 선택시 현재 과정은 필요 없습니다. (권장)
- keytool -import -trustcacerts -alias AAARoot -file AAACertificateServices.Root.crt.pem -keystore sslcert.co.kr.jks
- keytool -import -trustcacerts -alias USERTrustCA -file USERTrustRSACA.Chain1.crt.pem -keystore sslcert.co.kr.jks
- keytool -import -trustcacerts -alias SectigoCA -file SectigoRSADVCA.Chain2.crt.pem -keystore sslcert.co.kr.jks
- keytool -import -trustcacerts -alias SecureSign -file sslcert.co.kr_xxxxx.crt.pem -keystore sslcert.co.kr.jks
- (예제에 사용된 옵션 값 등은 예제용이므로, 실제 해당 도메인 정보로 지정하시기 바랍니다)
* 개인키가 CSR 생성 서버에만 - CSR 직접 생성 - 존재하는 경우에, 개인키에 발급된 "서버/체인/루트" 인증서를 통합합니다.
* 루트/체인 인증서는 상품별로 차이가 있으므로, 발급 완료시 첨부된 파일 내역에서 확인 가능합니다.
* CSR 자동생성 신청의 경우, .pfx / .jks 포맷 파일을 제공해 드리며 파일에 모두 통합되어 있습니다. (조합 과정 불필요)
* 필요에 따라서 .pem 파일을 이용하여 조합하거나 .pfx, .jks 파일에서 추가/변경/분리/조합하면 됩니다. (변환매뉴얼참조)
Server.xml - Connector 확인
JSSE NIO : <Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443" .../>
APR : <Connector protocol="org.apache.coyote.http11.Http11AprProtocol" port="8443" .../>
* 설치된 Tomcat 의 구동 Connector 종류를 확인 후, 해당 환경에 맞게 설정을 진행합니다.
Server.xml - JavaKeyStore 적용 예제 (CSR 자동 생성 이용 또는 jks 조합 후)
Tomcat 4+ (NIO,BIO)
<Connector
port="443" scheme="https" secure="true" SSLEnabled="true"
keystoreFile="인증서경로/sslcert.co.kr_xxxxx.jks 파일" keystorePass=".jks 패스워드"
sslProtocol="TLS"
/>
* JavaKeyStore(.jks) 는, [CSR 자동생성] 신청시 개인키+서버인증서+체인인증서+루트인증서가 포함되어 있습니다.
* CN(일반이름) 과 Alias 가 다르면, Alias Property 를 별도로 지정 해주어야 합니다.
* CSR 자동 생성 이용시, 개인키에는 패스워드가 지정되지 않습니다. (별도 지정 필요시 변환
매뉴얼 참조)
* CSR 자동 생성 이용시, .pfx / .jks 패스워드는 발급내역서 PDF 또는 주문상세 페이지를 참조하시기 바랍니다.
* 예제에 포함되어 있지 않은 Property 는 공식 매뉴얼 기본값 또는 서버 자체 설정값을 사용하시기 바랍니다.
Server.xml - PFX 적용 예제 (CSR 자동 생성 이용 또는 pfx 변환 후)
Tomcat 4+ (NIO,BIO)
<Connector
port="443" SSLEnabled="true"
scheme="https" secure="true" sslProtocol="TLS"
keystoreFile="인증서경로/sslcert.co.kr_xxxxx.pfx" keystorePass="pfx암호" keystoreType="PKCS12"
/>
*
pfx 포맷은, [CSR 자동생성] 신청시 개인키+서버인증서+체인인증서+루트인증서가 포함되어 있습니다.
* CN(일반이름) 과 Alias 가 다르면, Alias Property 를 별도로 지정 해주어야 합니다.
* CSR 자동 생성 이용시, 개인키에는 패스워드가 지정되지 않습니다. (별도 지정 필요시 변환 매뉴얼 참조)
* CSR 자동 생성 이용시, .pfx / .jks 패스워드는 발급내역서 PDF 또는 주문상세 페이지를 참조하시기 바랍니다.
* 예제에 포함되어 있지 않은 Property 는 공식 매뉴얼 기본값 또는 서버 자체 설정값을 사용하시기 바랍니다.
Server.xml - APR 환경 적용 예제 Apache Portable Runtime / PEM 직접 적용
Tomcat 5.5+ (APR)
<Connector
port="443" SSLEnabled="true"
scheme="https" secure="true" SSLProtocol="TLSv1.2"
SSLPassword="개인키 암호" (*CSR 수동 생성시에 설정 또는 인증서 변환 매뉴얼 참조)
SSLCertificateKeyFile=/인증서파일경로/개인키 ex. sslcert.co.kr_xxxxx.key.pem
SSLCertificateFile=/인증서파일경로/서버인증서 ex. sslcert.co.kr_xxxxx.crt.pem
SSLCertificateChainFile=/인증서파일경로/체인인증서ex. chain-bundle.pem
SSLCACertificateFile=/인증서파일경로/루트인증서 ex. AAACertificateServices.Root.crt.pem
/>
* 루트/체인 인증서는 상품별로 차이가
있으므로, 발급 완료시 첨부된 파일 내역에서 확인 가능합니다.
* AprLifecycleListener 리스너 구성 및 SSLEngine 활성화가 되어 있는지 미리 확인하시기 바랍니다.
* CSR 자동 생성 이용시, 개인키에는 패스워드가 지정되지 않습니다. (별도 지정 필요시 변환 매뉴얼 참조)
* 예제에 포함되어 있지 않은 Property 는 공식 매뉴얼 기본값 또는 서버 자체 설정값을 사용하시기 바랍니다.
설치 적용 확인
- SSL 설정 적용 후, Tomcat 서버를 재시작하여 정상 구동이 되는지 확인이 필요합니다.
- 서버 데몬 시작시 SSL 설정 관련 오류,경고가 있는지 콘솔/데몬/이벤트 로그 확인이 필요합니다.
- 서버 로컬에서 설정한 HTTPS 포트가 활성화 되어 있는지 netstat 등으로 확인해야 합니다.
- 외부에서 HTTPS 포트 접속이 되지
않는 다면 보안설정(방화벽등) 허용을 확인해야 합니다.
- L4 분산 환경은, HTTPS 패킷을 수신하는 모든 노드 웹서버에 SSL 적용이 필요합니다.
- L7 라우팅 환경은, L7 에도 HTTPS 활성 및 SSL 인증서 설정이 필요합니다. (장비별 자체 매뉴얼 참조)
- SSL 발급 도메인 웹페이지에 // 링크 적용을 별도 진행해야 최종적으로 SSL 암호화가 적용됩니다. (개발자,웹디자이너)
- PC 및 스마트폰의 "Chrome / Firefox / IE / Edge" 각 웹브라우져에서 "루트,체인,SSL,TLS" 경고가 발생 하는지 확인해야 합니다.
SSL 설치/적용 트러블슈팅 SSL 설치 적용 확인 하기 체인인증서 적용 여부 확인 인증서 포맷 변환 방법
관련 주요 이슈 사항
- SSL 인증서 적용시, 서버 이름 표시 (SNI) 지원 서버 및 클라이언트
- 서버에 보안이 약한 임시 Diffie-Hellman 공개 키가 있습니다
- 연결이 비공개로 설정되어 있지않습니다
- ERR_SSL_VERSION_OR_CIPHER_MISMATCH
- 페이지에 안전하지 않은 다른 리소스, 혼합된 콘텐츠 차단, 자물쇠 표시 없음
- Apache, NginX 등 웹서버 SSL Cipher Suite 권장 값
- OpenSSLContext.init Error initializing SSL context 오류
- Alias name tomcat does not identify a key entry 오류
- SSLCertificateFile must be defined when using SSL with APR 오류
- Java 기반에서 SSL 접속시, PKIX path building failed 오류
- 주요 웹브라우져 SSL v2 v3 및 TLS 1.0, 1.1 지원 삭제
참고 추가 자료
- Apache Tomcat 7.0 - SSL Configuration HOW-TO (공식매뉴얼)
- Apache Tomcat 8.0 - SSL Configuration HOW-TO (공식매뉴얼)
- Apache Tomcat 9.0 - SSL Configuration HOW-TO (공식매뉴얼)
- moz://a SSL Configuration Generator (SSL/TLS 환경설정 생성기)
- Tomcat 에서 SNI 방식 SSL 인증서 Server.xml 설정 예제
- 보안서버 구축 가이드 (정부 배포 PDF 모음)
- 웹페이지 html 소스에 https 링크 적용 가이드
설치 적용 관련 FAQ
- SSL 인증서를 새로 발급 받아 적용했는데, 기존 인증서가 계속 보입니다?
- 443 포트 충돌 접속 오류가 발생합니다. 이유(원인)가 무엇인가요?
- SSL 발급 완료시, 어떤 파일이 제공(포함) 되나요? (pem,key,crt,pfx,jks,p7b)
- 개인키 암호가 없어서 설치 적용이 안되고 있습니다?
- 체인(중개) 인증서를 꼭 적용해야 하나요?
- SSL 설치 적용할 웹서버 종류가 2가지 이상일 경우에는?
- 웹페이지에 https 링크 적용/접속시 웹브라우져 경고창 관련 (점검사항)
CA 기술 자료
- Sectigo //support.sectigo.com/Com_KnowledgeMainPage
- DigiCert //www.digicert.com/kb/ssl-certificate-installation.htm
- GlobalSign //support.globalsign.com/ssl/ssl-certificates-installation/install-ssl-certificate-overview