Tomcat SSL 적용

bin·2024년 5월 28일
0

사내에서 HTTPS를 적용한 소스를 실서버에 배포하게 되었습니다. 이에 HTTPS/SSL이란 무엇인지 간단히 알아보고, 톰캣서버에 어떻게 적용하는지 OpenSSL을 이용하여 알아보겠습니다.

SSL이란?

쉽게 말하면 안전한 사이트 접속을 보장하는 인증체계입니다. HTTPS/SSL 통신을 하면 인증기관(CA)의 인증을 받아 안전한 사이트 접속이 가능해집니다.

1. OpenSSL을 이용하여 나만의 무료 SSL 인증서 발급

아래 주소를 통해 다운로드 받으면 됩니다.
저장 위치는 C드라이브 바로 아래 저장하면 되고, 다운이 완료되면 /bin/openssl.exe를 실행합니다.

https://sourceforge.net/projects/openssl/files/latest/download?source=typ_redirect%EF%BB%BF

2. 개인키와 공개키 발급

개인키 발급

genrsa -out [키이름] 2048 // 비밀번호가 없는 개인 키 생성
e.g. genrsa -out private.key 2048

genrsa -des3 -out [키이름] 2048 // 비밀번호가 담긴 개인 키 생성
e.g. genrsa -des3 -out private.pem 2048

공개키 발급

개인키와 쌍이 되는 공개키를 만들어봅시다.

rsa -in [개인키] -pubout -out [공개키] rsa -in priavte.key -pubout -out public.keyCopy
e.g. rsa -in private.key -pubout -out public.key rsa -in priavte.key -pubout -out public.keyCopy

3. CSR 생성

CSR이란 인증서 발급을 위해 필요한 정보가 암호화되어 담겨진 파일입니다. 일반적으로 조직명, 도메인명, 지역 및 국가와 같은 정보를 포함합니다.

req -new -key [] -out [CSR이름.csr]
e.g. req -new -key private.key -out private.csr

// 명령어가 실행되면 여러 정보를 입력해야 하는데, 어차피 개발용이므로 자유롭게 입력하시면 됩니다. 

4. CRT(=인증서) 생성

나만의 사설 CA에서 인증까지 받은 인증서를 생성하는 방법입니다.

우선 인증서에 서명을 해줄 rootCA를 생성해줍니다.

genrsa [암호화 알고리즘] -out [키이름] 2048
e.g. genrsa -aes256 -out rootCA.key 2048

rootCA의 사설 CSR을 만들어줍시다.

req -x509 -new -nodes -key [개인키] -days [유효날수] -out [인증서파일명]
e.g. req -x509 -new -nodes -key rootCA.key -days 3650 -out rootCA.pem

// 명령어가 실행되면 여러 정보를 입력해야 하는데, 어차피 개발용이므로 자유롭게 입력하시면 됩니다. 

마지막으로 CRT를 만들어줍시다.

x509 -req -in private.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out private.crt -days 3650

5. Tomcat 서버 HTTPS/SSL 적용

Tomcat에 인증서를 적용할 것이기 때문에 pkcs12라는 형식으로 바꿔줘야 합니다. 이 .keystore를 사용하여 SSL 통신을 구현할 수 있습니다.

인증서를 pkcs12 형식으로 변경

pkcs12 -export -in private.crt -inkey private.key -out .keystore -name tomcatCopy

Tomcat 설정 변경

/톰캣경로/conf/server.xml를 열어 아래 설정을 추가합니다.
keystorepass와 keystorefile은 본인이 설정한 keystore의 비밀번호와 경로로 수정하면 됩니다.

<connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
          maxthreads="150" sslenabled="true" scheme="https" secure="true"
          clientauth="false" sslprotocol="TLS"
          keystorepass="password" keystorefile="C:/OpenSSL/bin/.keystore" />

수정 후 https://[URL]:[port]로 접속 시 정상 동작한다면 SSL이 적용된 것입니다.

1개의 댓글

comment-user-thumbnail
2024년 6월 3일

오랜만에 포스팅 하셨네용

답글 달기