Spring boot - local tomcat 에서 ssl 설정하

동기

최근 chrome80 의 cookie 정책변경으로 저자가 서비스하는 모든 서비스들을 https로 운영하기로 했다. 관련 이슈는 여기 (https://hyeonguj.github.io/2020/02/05/chrome80/ ) 에 정리하였다.

기존에는 local환경과 개발서버에서는 http로 통신을 하며 작업을 하였으나 바뀐 정책에서 쿠키를 읽기위해서는 https로 서비스를 해야한다.

개발서버의 경우 apache나 nginx에서 모두 http -> https로 바꾸어주며, 인증서 처리가 되어있기때문에 문제가 되지 않는다. 하지만 local 환경의 경우 tomcat 또는 spring boot application에서 https로 서비스를 할 수 있어야 테스트가 가능하다.

Spring boot https 활성화하기

우선 ssl 인증서를 준비한다.
만드는 방법은 아래와 같다

** windows 기준 **

  • keytool -genkey -alias tomcat -keyalg RSA -validity 3650 -keystore tomcat.keystore

** mac **

  • sudo keytool -genkey -alias tomcat -keyalg RSA -validity 3650 -keystore
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
keytool -genkey -alias tomcat -keyalg RSA -validity 3650 -keystore tomcat.keystore
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]:
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:
What is the name of your City or Locality?
[Unknown]:
What is the name of your State or Province?
[Unknown]:
What is the two-letter country code for this unit?
[Unknown]:
Is CN = Unknown, OU=Unknown, O = Unknown, L = Unknown, ST = Unknown, C = Unknown correct?
[no]: yes

그리고 application.yml에 아래와 같이 설정해주도록 한다.

1
2
3
4
5
6
7
8
9
server:
ssl:
enabled: true
key-alias: tomcat
key-password: 설정한 비밀번호
key-store: tomcat.keystore의 경로/tomcat.keystore
key-store-provider: SUN
key-store-type: JKS
key-store-password: 설정한 비밀번호

마지막으로 application을 실행해서 https로 접속하여 확인하자.

local tomcat 에서 ssl 설정하기

spring boot web application이 아닌경우라면 로컬환경에서 톰켓을통해 실행할 가능성이 크다. 이런경우에도 동일하게 인증서를 먼저 생성해준다.

이후 아래와같이 https 포트를 지정해준다

그리고 local tomcat 의 server.xml에 아래 항목을 추가한다

1
2
3
4
5
6
7
<!-- Define an SSL Coyote HTTP/1.1 Connector on port 8443 -->
<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
port="8443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="tomcat.keystore 파일의 경로" keystorePass="2번에서 설정한 비밀번호"
clientAuth="false" sslProtocol="TLS"/>

Comments