운영 혹은 개발 환경에서는 Nginx 혹은 AWS ELB 같은 곳에서 SSL 인증서를 설치하게 되는데, 로컬 환경에서 개발해야 하는 경우 HTTPS 서버가 필요할 때가 종종 있다. 로컬 환경에서 HTTPS 로 설정하기 위해 스프링 내장 WAS 에 HTTPS 를 설정해준다.

keystore 옮기기

발급받은 인증서의 keystore 파일을 Spring Boot 프로젝트에 적용한다. Let’s Encrypt 에서 인증서를 발급받았다면, /etc/letencrypt/live/{발급받은 도메인 주소} 안에 pem 파일이 있다.

스프링 부트는 pem 파일을 지원하지 않기 때문에 pkcs12 형태로 변경해준다. 해당 openssl 명령어로 pkcs12 형태의 key 를 복사한다.

openssl pkcs12  -export -in fullchain.pem \\ 
				-inkey privkey.pem \\ 
                -out keystore.p12 -name tomcat \\ 
                -CAfile chain.pem \\ 
                -caname root

생성한 pkcs12 파일을 스프링 부트 프로젝트의 resources 폴더 안에 넣어준다.

spring boot 설정 (application.properties / yml)

Untitled

server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-type=PKCS12
server.ssl.key-store-password= 아까 설정한 비밀번호
server.ssl.key-alias= 아까 설정한 alias
server.port=9090
server.http2.enabled=true

pkcs12 파일을 만들 때 입력한 비밀번호를 yml 파일에 설정해준다. 재빌드 후 접속해보면 HTTPS 에 접속할 수 있다.

https://taewooblog.tistory.com/142

https://velog.io/@tenacity/스프링부트-내장-웹-서버에-HTTPSSSL와-HTTP2를-적용하는-법