SSL 인증서를 사용하려면 서버에 맞춰 인증서를 설정해야하는데 톰캣에서 사용하던 인증서를 아파치에 사용해야 할때가 있다. 그 반대의 경우도 물론 있게되고.. 작업을 한줄 요약하자면 crt 인증서 <=> pfx 인증서 <=> jks 인증서 로 전환을 하면 된다. 당연한 이야기이지만 비밀번호는 알고 있어야만 한다.
아파치 -> 톰캣 (crt to jks)
crt -> pfx
$ openssl pkcs12 -inkey incert.key -in incert.crt.pem -certfile incert.chainca.crt -export -out outcert.pfx
pfx -> jks
$ keytool -importkeystore -srckeystore outcert.pfx -srcstoretype pkcs12 -destkeystore outcert.jks -deststoretype jks
확인
$ keytool -list -keystore outcert.jks -rfc
톰캣 -> 아파치 (jks to crt)
jks -> pfx
$ keytool -importkeystore -srckeystore incert.jks -srcstoretype jks -destkeystore outcert.pfx -deststoretype pkcs12
pfx -> cert
$ openssl pkcs12 -in outcert.pfx -clcerts -nokeys -out outcert.crt
pfx -> key
$ openssl pkcs12 -in outcert.pfx -nocerts -nodes -out outcert.key
pfx -> chaincrt jks 인증서에서 alias name이라는 값을 확인하고 alias로 연결(?)된 인증서를 출력한다. tomcat이라는 이름을 예로 들면 아래처럼 진행한다. 체인인증서가 2개를 갖는다면 아래처럼 [1], [2] 하는식으로 쭉 출력된다.
$ keytool -list -v -keystore incert.jks | grep Alias Enter keystore password: ******** Alias name: tomcat ......... $ keytool -list -alias tomcat -keystore outcert.pfx -rfc Enter keystore password: Alias name: tomcat Creation date : Nov 15, 2022 Entry type : PrivateKeyEntry Certificate chain length: 2 Certificate[1]: -----BEGIN CERTIFICATE----- MIIGazCCBVO.... -----END CERTIFICATE----- Certificate[2]: -----BEGIN CERTIFICATE----- MIIEiTCCA3Gg.... -----END CERTIFICATE-----
chaincrt 생성 앞에 생성된 인증서 리스트를 별도의 텍스트 파일로 생성한다. 중간에 Certificate[1]: 같은것들은 모두 지우고 —–BEGIN CERTIFICATE—– ~ —–END CERTIFICATE—– 인증서들을 쭉 붙여준다.
$ vi outcert.chainca.crt -----BEGIN CERTIFICATE----- MIIGazCCBVO.... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEiTCCA3Gg.... -----END CERTIFICATE-----
아래 스택오버플로 댓글에 보면 배치짜서 해도 될듯한데 그게 더 귀찮….. 이런것들은 쉽게 가자..
reference