2022-11-15 | dev

SSL인증서를 톰캣, 아파치 상호 변환하기

SSL 인증서를 사용하려면 서버에 맞춰 인증서를 설정해야하는데 톰캣에서 사용하던 인증서를 아파치에 사용해야 할때가 있다.
그 반대의 경우도 물론 있게되고.. 작업을 한줄 요약하자면 crt 인증서 <=> pfx 인증서 <=> jks 인증서 로 전환을 하면 된다.
당연한 이야기이지만 비밀번호는 알고 있어야만 한다.

아파치 -> 톰캣 (crt to jks)

  1. crt -> pfx
$ openssl pkcs12 -inkey incert.key -in incert.crt.pem -certfile incert.chainca.crt -export -out outcert.pfx
  1. pfx -> jks
$ keytool -importkeystore -srckeystore outcert.pfx -srcstoretype pkcs12 -destkeystore outcert.jks -deststoretype jks
  1. 확인
$ keytool -list -keystore outcert.jks -rfc

톰캣 -> 아파치 (jks to crt)

  1. jks -> pfx
$ keytool -importkeystore -srckeystore incert.jks -srcstoretype jks -destkeystore outcert.pfx -deststoretype pkcs12
  1. pfx -> cert
$ openssl pkcs12 -in outcert.pfx -clcerts -nokeys -out outcert.crt
  1. pfx -> key
$ openssl pkcs12 -in outcert.pfx -nocerts -nodes -out outcert.key
  1. 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-----
  1. chaincrt 생성
    앞에 생성된 인증서 리스트를 별도의 텍스트 파일로 생성한다.
    중간에 Certificate[1]: 같은것들은 모두 지우고 —–BEGIN CERTIFICATE—– ~ —–END CERTIFICATE—–
    인증서들을 쭉 붙여준다.
$ vi outcert.chainca.crt
-----BEGIN CERTIFICATE-----
MIIGazCCBVO....
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEiTCCA3Gg....
-----END CERTIFICATE-----

아래 스택오버플로 댓글에 보면 배치짜서 해도 될듯한데 그게 더 귀찮…..
이런것들은 쉽게 가자..

reference