본문 바로가기
공부

[Spring Boot] ssl 적용

by yeaseul912 2023. 4. 3.
728x90

frontend에서 ssl을 적용하여 https 프로토콜을 사용하는 순간,

콘솔에서 api 서버가 https 가 아니라 안전하지 않다는 에러를 계속 뿌렸다.

또, network 탭에서는 preflight 가 계속 error였다.

아무리 화면은 잘 나온다고 해도 에러를 지나치는건 굉장히 불편하다.!

그래서 spring boot api 서버에도 ssl 을 적용하기로 했다.

 

1. Key 파일 로 Springboot key 만들기 (certbot etc.)

frontend 쪽에서 만든 아래와 같은 key 파일이 있어서, 아래 파일을 활용하여 도메인을 적용해보았다.

key 만드는 것 부터 필요하다면 certbot 을 사용하면 된다.!

참고 : SpringBoot 무료 SSL 인증서 적용하기 (Certbot)

 

OpenSSL 을 사용하여 인증서와 개인 키를 결합하여 PKCS#12 형식의 key를 생성하는 명령 실행한다.

생성이 완료되면 비밀번호를 입력하라고 한다. 이 비밀번호는 application.yml 에서 사용하니까 꼭 기억!

openssl pkcs12 -export -in cert.pem -inkey nopass_rsa_privkey.pem -out springkey.p12 -name tomcat -CAfile fullchain.pem -caname root
  • openssl : OpenSSL 명령어 시작
  • -export: PKCS#12 형식으로 키스토어를 내보내는 옵션
  • -in: 인증서 파일의 경로를 지정
  • -inkey: 개인 키 파일의 경로를 지정
  • -out: 출력될 PKCS#12 파일의 경로를 지정
  • -name: 키스토어에 저장될 인증서 체인의 이름을 지정
  • -CAfile: 인증서 체인 파일의 경로를 지정
  • -caname: 인증서 체인 내에서 검증된 루트 인증서의 이름을 지정

error :

Unable to start embedded Tomcat server
더보기
 Failed to start bean 'webServerStartStop'; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat server
        at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181)
        at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54)
        at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356)
        at java.lang.Iterable.forEach(Iterable.java:75)
        at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155)
        at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123)
        at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935)

-in 에 적을 키와 -CAfile에 적을 키 파일을 헷갈려서 키 파일을 잘못 생성했더니 톰캣 서버를 시작할수 없다는 에러가.. 

아래 dependency 가 있는데도 저 에러가 뜬다면 키파일을 잘못 만든거다!!!!!!

implementation group: 'org.springframework.boot', name: 'spring-boot-starter-tomcat', version: '2.7.0'

 

2. 생성된 Key 파일을 spring boot 에 적용하기

application.yml(properties) 에 아래와 같이 작성하면, 적용이 된다.!

server:
  ssl:
    enabled: true
    key-store: "ssl/springkey.p12"
    key-store-type: "PKCS12"
    key-store-password: "key 생성할때 적은 password"

 

* postman 에서는 "https://도메인" 통신이 안되더라.  => https 로 통신 요청할 때 하단에 알림창이 나오는데 그때 확인 누르면 된다.

깔끔한 콘솔창, 에러없는 network 창, frontend 와 통신, 성공적!

 

Reference

https://stackoverflow.com/questions/75351338/pkcs1-vs-pkcs8-vs-pkcs12-for-rsa-keys

 

PKCS#1 vs PKCS#8 vs PKCS#12 for RSA keys

What is the recommended RSA key format to use if you only started using it nowadays? I know that PKCS#1 is a format dedicated to RSA keys but do I need to avoid using it because it's old? recomme...

stackoverflow.com

 

반응형

댓글