톰캣으로 돌리는 프로젝트 Let's Encrypt (SSL -HTTPS) 적용하기

황씨·2024년 10월 30일
post-thumbnail

CentOS 서버에 테스트 프로젝트를 하나 돌리고 있는데
Http 통신을 하고 있어서 외부에 보여주기 그래서
Https 통신을 할 수 있도록 세팅을 좀 해볼려한다.

1. Cerbot 설치

sudo yum install certbot

yum 패키지 관리자를 이용해서 Cerbot 설치를 한다.

2. SSL 인증서 발급

sudo certbot certonly --standalone -d demo.내도메인.com

cerbot 을 통해서 demo.내도메인.com 도메인에 대한 SSL 인증서를 발급받았다.
standalone 모드로 인증서를 발급 받기위해서 기존에 돌아가고 있던 Tomcat, nginx 를 중지한다.

standalone 모드 :
Cerbot이 자체적으로 간단한 웹 서버를 실행하여 Let's Encrypt 인증 과정을 처리하는 방식이다. 이때는 Cerbot이 Http-01 챌린지(포트80)을 통해 도메인 소유 여부를 확인한다.

3. Tomcat에 사용할 keystore 생성

sudo openssl pkcs12 -export -in /etc/letsencrypt/live/demo.내도메인.com/fullchain.pem \
    -inkey /etc/letsencrypt/live/demo.내도메인.com/privkey.pem \
    -out /etc/letsencrypt/live/demo.내도메인.com/keystore.p12 \
    -name tomcat -CAfile /etc/letsencrypt/live/demo.내도메인.com/chain.pem -caname root

Tomcat에서 인증서를 사용하기 위해 openssl 을 사용하여 인증서와 개인 키 파일을 PKCS#12 형식(keystore.p12)로 변환해주었다.

비밀번호는 server.xml 에서 쓰일거니깐 입력하고, 비밀번호 확인부분도 동일하게 입력만 해주면 된다.

4. Tomcat 설정 (server.xml) 구성

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="/etc/letsencrypt/live/demo.내도메인.com/keystore.p12"
                     type="RSA"
                     certificateKeystorePassword="설정한 비밀번호" />
    </SSLHostConfig>
</Connector>

Https 커넥터를 추가하고 keystore 파일 경로와 비밀번호를 설정해준다.

<Connector port="80" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="443" />

이제 포트80요청을 HTTPS로 리다이렉트하도록 추가만 하면 끝!

Tomcat을 재시작하고 HTTPS가 적용되었는지 확인해보자.

추가+ (자동 갱신 설정)

음 추가로 Let's Encrypt의 인증서는 유효기간이 90일이다.
그래서 만료전에 주기적으로 갱신해야하는데 너무 귀찮다 ;;

그래서 그냥 자동으로 갱신 할 수 있도록 세팅을 해놓자

sudo crontab -e

Cerbot의 갱신 스크립트를 크론탭에 추가해서 주기적으로 실행 할 수 있도록한다.

0 0 * * * /usr/bin/certbot renew --quiet && /home/gaonsoft/www/gnbis/opt/apache-tomcat-8.5.65/bin/shutdown.sh && /home/gaonsoft/www/gnbis/opt/apache-tomcat-8.5.65/bin/startup.sh

이와 같이 크론탭 항목을 추가하여 매일 자정에
톰캣 서버 종료 및 실행을 해주어서 자동갱신을 완료한다.

profile
성격존나급한 개발자

0개의 댓글