Certbot으로 만든 인증서를 Spring Boot에서 사용하기

Posted by , March 19, 2018
Spring BootCertBotLetsEncrypt
Series ofSpring_SpringBoot

주의

이 문건은 과거 Hexo 블로그 (2018-03-19) 에서 이동된 문서입니다.

시간이 지남에 따라 최신 기술과 다를 수 있으니 주의 바랍니다.


thumbnail


Certbot으로 만든 인증서 사용하기

전의 포스팅인 Certbot으로 무료 인증서 발급 받기 에서 만든 인증서를 이용해 Spring Boot의 SSL을 적용하는 방법에 대해서 알아보겠습니다.

만약 Certbot으로 인증서를 만들지 않으신 분은 위의 포스팅 링크를 참고하여 만들어주시면 됩니다.


PEM -> JKS 변환

먼저 Certbot에서 인증서를 생성할 경우 총 4개의 파일이 certbot 경로에 생성되게 됩니다.

다른 설정을 건들지 않았다면 /etc/letsencrypt/live 경로 밑에 도메인 이름으로 저장이 됩니다.

만약 **/etc/letsencrypt/**까진 접근이 되지만 live 디렉토리에 접근 시 -bash: cd: live/: Permission denied 와 같은 권한 문제를 만날 경우 sudo su 등을 통해서 접근합니다.

디렉토리 안에는 총 4개의 pem 파일이 생성되어 있습니다.

  • privkey.pem : 개인키
  • fullchain.pem : 내 기본 공개키 + 기타 정보를 포함한 공개 키 (Node Express 서버에서는 option의 cert에 이 파일 사용)
  • cert.pem : 기본 공개키
  • chain.pem : 기타 정보를 포함한 공개키(이것이 없으면 Firefox나 모바일 크롬에서 Https 미적용)

이 파일들을 먼저 알맞은 곳으로 복사를 해줍니다.


PKCS12로 변환하기

복사를 하였으면, 해당 디렉토리로 이동 후 openssl 명령어를 수행합니다.

> openssl pkcs12 -export -in cert.pem -inkey privkey.pem -out cert_and_key.p12 -name ttp -CAfile chain.pem -caname root

쓰인 속성에 대한 설명은 아래를 참고하세요.

  • export : PKCS#12 파일 생성
  • in : 개인키 파일 이름 (p12에 들어갈 인증서)
  • inkey : 포함시킬 개인키
  • out : 생성될 p12 파일명
  • name : Java에서 KeyStore로 접근시 alias항목이 되는 부분 (필수 입력)
  • CAfile : 인증서 발급 체인(CA 인증서 묶음)

위 명령어를 실행하면 사용할 암호를 입력하는 커맨드가 뜹니다

Enter Export Password:
Verifying - Enter Export Password:

Keytool을 통해 jks 파일 만들기

openssl 명령어를 통해 cert_and_key.p12 파일이 생성되었다면 keytool명령어를 통해 jks파일을 만들어줍니다.

keytool 명령어는 Keystore 기반으로 인증서와 키를 관리할 수 있는 커맨드 유틸리티이며 JDK에 포함되어 있습니다.
openssl과 비슷한 용도로 사용됩니다.

> keytool -importkeystore -deststorepass [사용할 암호] -destkeypass [사용할 암호] -destkeystore [생성할 jks 파일명] -srckeystore cert_and_key.p12 -srcstoretype PKCS12 -srcstorepass [PKCS12에서 사용한 암호] -alias [openssl에서 -name 속성에 입력한 이름]

> Importing keystore cert_and_key.p12 to letsencrypt.jks...

이렇게 하면 현 디렉토리에 지정한 jks파일이 생성되게 됩니다.


Import 해주기

그리고 마지막으로 생성된 파일을 임포트 해줍니다.

> keytool -import -trustcacerts -alias root -file chain.pem -keystore letsencrypt.jks
> Enter keystore password: [openssl pkcs12 입력한 암호]
> Certificate was added to keystore

이렇게 하면 pem 인증서를 jks 파일로 변환하고, 해당 변환된 파일을 keytool에 import까지 해주었습니다.
이후에는 Spring Boot에서 HTTPS 적용하기 포스팅에 절차에 따라 등록하시면 됩니다.

약간 변동사항이 있다면...

	key-store:
	key-store-password:
	key-password:

위 세가지 옵션만 사용하며, key-alias, trust-store, trust-store-password은 저 같은 경우 사용하지 않았습니다.


결론

포스팅을 위해 자료를 어느정도 모아두었지만, 정리하는 것은 힘드네요.
이 글을 보시고 도움이 되셨으면 합니다.

감사합니다.