Spring Boot 어플리케이션 SSL인증서 적용

먼저 SSL 인증서를 적용하려면 도메인을 구입하여야 한다.

또한 도메인 A레코드에 서버 IP를 추가하여 DNS 쿼리가 정상적으로 이루어지는지 확인하여야 한다.

 

다음으로 https://www.sslforfree.com 사이트에서 인증서를 발급받아야 한다. 

 

이곳에 본인의 도메인을 입력하고 버튼을 누른다.

 

현재 화면에서 도메인 다시 입력 후 Validity는 무료버전인 90일로 설정 후 나머지는 기본으로 진행하면 된다.

 

다음 화면으로 넘어가면 도메인이 자신의 소유인 것을 인증해야 하는데 Email 은 해당 Email이 있어야 하므로 DNS 인증을 한다.

 

도메인을 구입한 사이트에서 도메인 레코드 추가를 하는데 CNAME 레코드를 추가하여야 한다. 

 

 

CNAME Record 의 Name = Name Value, Value = Point To Value, TTL은 1시간(3600)으로 설정하면 완성이다.

 

이 과정을 거치면 default 형식으로 zip 파일을 다운 받는다.

 

위와 같은 파일들을 받았다면 해당 파일들 위치에서 터미널을 열어 다음 명령어로 비밀키를 만들어야 한다.

openssl pkcs12 -export -in certificate.crt -inkey private.key -out spring_key.p12

 

해당 명령어를 실행하면 비밀번호를 지정해줘야 하는데 그냥 Enter만 누르면 비밀번호 없이 진행할 수 있다.

위의 파일들을 가지고 spring_key.p12 라는 비밀키를 만든다.

.p12 앞의 이름은 아무거나 상관없다.

 

그다음 spring boot의 application.yml에 키 정보와 암호화 프로토콜을 지정해줘야 한다.

server:
  port: {your port}
  ssl:
    enabled: true
    key-store-type: PKCS12
    key-store: spring_key.p12
    key-store-password: ""
    protocol: TLS
    enabled-protocols: TLSv1.2

 

그다음 배포할 서버의 root 디렉토리에 해당 비밀키를 위치시키고 실행시키면 정상적으로 작동된다.

 

하지만 jar 파일로 서버를 실행시킨다면 key를 따로 빼서 Jar 파일과 같은 위치에 놓아야 인식할 수 있다.

 

만약 하나의 서버뿐만 아니라 다른 포트에 대해서도 SSL 인증을 적용하고 싶다면 Nginx에 인증서를 연결하고 Nginx의 리버스 프록시 기능을 이용하여 다른 포트로 포워딩을 해주면 된다. 해당 방법은 추후에 올릴 예정!

 

하다가 이해 안가는 것이 있다면 질문주세요!