본문 바로가기

Programming/Spring Boot

Spring Boot 프로젝트에 https 연결을 위한 무료 ssl 적용 방법

API 사용을 위한 URL 등록이나 여러 이유로 도메인, https로만 작성을 해야하는 경우가 있다.
Spring Boot에서 jar파일로 배포를 하면 http로 접속을 하게 되므로 SSL 인증서 발급과 적용 과정이 필요하다.


1. let's encrypt SSL 인증서 발급

  ① 미리 도메인을 구입한 서버가 필요.
  ② 터미널에서 ssl 인증서를 발급받을 경로를 생성하고 이동.
  ③ 우선 SSL 인증을 위한 Certbot tool을 설치.

$ sudo apt update
$ sudo apt-get install  letsencrypt -y


  ④ 웹서버를 중단.

$ sudo service nginx stop


  ⑤ certbot 명령을 이용해 SSL 인증을 시작.

$ certbot certonly --standalone -d 도메인명


  ⑥ 인증이 완료되면 웹서버를 다시 가동.

$ service nginx restart




2. pkc12형태로 변경

  ① /etc/letsencrypt/live/도메인명 안에 pem 파일 4개 확인. : 
    cert.pem, chain.pem, fullchain.pem, privatekey.pem
  ② Spring Boot에서는 pem 파일을 지원하지 않기 때문에, pkc12형태로 변경.

$ openssl pkcs12 -export -inkey privkey.pem -in cert.pem -out keystore.p12


  ③ Spring Boot 디렉토리의 src/main/resources 밑, application.properties 파일과 동일 경로로 pkc12파일을 복사.


3. Spring Boot의 application.properties(.yml) 설정.

  ① application.properties의 설정.

server.ssl.key-store= classpath:keystore.p12
server.ssl.key-store-type=PKCS12
server.ssl.key-store-password=pkcs12파일변환시입력한패스워드
server.ssl.key-alias=1
server.port=8443
server.http2.enabled=true



  ② applications.yml의 경우 설정.

server:
  ssl:
    enabled: true
    key-store: classpath:keystore.p12
    key-store-password: pkcs12파일변환시입력한패스워드
    key-store-type: PKCS12
    key-alias: 1
  port: 8443




4. https 접속

  ① 이클립스 maven clean, install하고 target에서 jar파일을 서버로 복사.
  ② 빌드하고 다시 배포하면 브라우저에서 https로 접속 가능.

$ nohup java -jar jar파일명 &



그 외.
배포 시 alias 이름이 잘못되었다는 오류가 발생하면 alias로 이름은 어떤 것으로 작성했었는지 확인하고 application.properties 또는 application.yml에서 key-alias를 변경하고 빌드, 배포하면 해결된다.

$ keytool -v -list -keystore keystore.p12
# alias로 이름은 어떤 것으로 작성했었는지 확인.