letsencrypt ssl인증/갱신까지
인증서 발급
certbot 홈페이지에 들어가서보았는데 tomcat은 certbot의 software 옵션에서 보이지 않습니다
하지만 걱정마세요 tomcat도 당연히 사용할수 있습니다.
좀 더 자동화되고 편리한 설정이 되지 않는 것일뿐,
우리의 목적은 ssl 인증서이니깐요
ssl 인증서를 만든다음에 운영중인 tomcat에 설정해주시면 됩니다
certbot 공식문서에는 snapd 를 설치하라고 하지만 설치하는것도 약간 난관에 부딪힐수 있습니다.
aws를 사용하고 계신다면 amazon linux에
sudo yum install certbot
를 활용할수 있으므로 이렇게 쉽게 설치해보아요
설치가 완료되었다면 이제 certbot을 실행해봅니다
서버를 잠시 중지할수 있다면 이렇게 명령어를 입력하면 되고
sudo certbot certonly --standalone
잠시도 중지할수 없다면 이렇게 해주세요
sudo certbot certonly --webroot
다만 webroot 옵션을 사용하려면 letsencrypt의 동작 매커니즘상
내 도메인 유효성을 검증하기 위해 /.well-known 폴더를 http 상에서 서빙을 해야합니다.
그러니 서버를 잠시 정지시키고 standalone 옵션을 활용하는것도 좋습니다.
certbot 명령어를 실행했다면 콘솔 상에서 몇가지 질문이 진행됩니다.
동의하시고, 사용할 도메인을 입력해주시면 설정이 완료됩니다
모든 과정이 완료되면 아래의 경로에 파일들이 생성되어있는것을 확인할수 있습니다.
/etc/letsencrypt/live/도메인명/fullchain.pem
/etc/letsencrypt/live/도메인명/privkey.pem
/etc/letsencrypt/live/도메인명/cert.pem
자 이제 인증서 파일을 얻었으니
톰캣에서 설정을 변경할 차례입니다
톰캣의 conf/server.xml 파일을 열어 수정을 합니다
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" | |
maxThreads="150" SSLEnabled="true"> | |
<SSLHostConfig> | |
<Certificate certificateKeyFile="/etc/letsencrypt/live/도메인명/privkey.pem" | |
certificateFile="/etc/letsencrypt/live/도메인명/cert.pem" | |
certificateChainFile="/etc/letsencrypt/live/도메인명/fullchain.pem" | |
type="RSA" /> | |
</SSLHostConfig> | |
</Connector> |
server.xml 파일에 ssl 관련 설정이 주석처리되어있는것을 볼수 있는데요
그런데 잘 살펴보면 두가지의 커넥터가 존재하고 있습니다
protocol="org.apache.coyote.http11.Http11AprProtocol"
protocol="org.apache.coyote.http11.Http11NioProtocol"
이것까지는 알면 머리가 너무 아프니
protocol="org.apache.coyote.http11.Http11NioProtocol"
이걸로 하여 진행합니다
Http11AprProtocol을 사용하는 경우에는 추가적인 설정이 필요하거든요
sudo certbot renew --dry-run
--dry-run 옵션을 넣은 명령어로 인증서의 갱신 명령어가 잘 동작하는지 확인할 수 있습니다
다만 이 경우도 마찬가지로 서버가 중지된 상태에서 동작시켜야 합니다
출처: https://trend21c.tistory.com/2172 [나를 찾는 아이]
인증서 발급 후 톰캣 설정
1. letsencrypt 감지를 위해 톰캣의 기본포트를 http 포트로 변경
2. 위에처럼 톰캣에서 1023 이하의 포트를 사용할경우,주석을 해제하고, yes를 기입
3. 톰캣 재시작해서, 8080포트가 80포트로 도는걸 확인
4. letsencrypt 설치진행. 구매한 도메인을 기입
5. 성공 시, /etc/letsencrypt/live/[도메인] 경로에 인증파일들 생성
서비스를 하게된다면, https에 대해서 만료날짜를 미리 알아두는 것도 중요.
6. 제공받은 인증파일들 사용할수있도록 권한을 변경하고, 톰캣 환경파일에 443 포트허용설정
7. 톰캣을 재시작 한뒤, 테스트 진행
1. netstat 확인해보기
2. curl 명령어로 확인해보기
Apache Tomcat8 - letsencrypt를 통해 https 도메인 적용, Ubuntu 18.04
- 80,443 포트 허용 - 도메인 구매 등 완료 1. letsencrypt 감지를 위해 톰캣의 기본포트를 http 포트로 변...
blog.naver.com
인증서 갱신하기
갱신 테스트
아래 명령어로 실제 갱신이 아니라 잘 갱신되는지, 명령에 오류가 나진 않는지 등을 테스트 해 볼 수 있습니다.
#
$ certbot renew --dry-run
실제로 갱신하기
뭐 별 것 없습니다. --dry-run만 빼고 실행하시면 됩니다.
$ certbot renew
인증서 만료일 확인하기
Certbot으로 부터 발급받은 인증서들에 대한 정보를 표시합니다.
$ certbot certificates
자동 갱신하기
그런데 이걸 3개월 알람을 맞춰두고 매 번 사람이 하는 것 까먹을 수도 있고 여간 불편한게 아닙니다. 걱정하지 마세요. 우리에겐 크론탭(Crontab)이 있습니다. Crontab은 정해진 일시에 반복적으로 특정 작업을 할 수 있는 프로그램이고 우분투에 기본적으로 설치되어 있습니다.
간단한 Crontab 명령과 규칙을 살펴보겠습니다.
자주쓰는 명령 2개
# Crontab 보기
$ sudo crontab -l
# Crontab 편집
$ sudo crontab -e
# Crontab 실행 로그
$ view /var/log/syslog
crontab 명령어 앞에 sudo를 써준 것은 root 권한의 크론탭을 수정하고 보겠다는 의미입니다. 각자 웹서버와 인증서를 관리하는 사용자 계정의 크론탭을 이용하면 됩니다. certbot을 그냥 설치했을 때 /etc/letsencrypt에 인증서를 쓸 권한이 필요하므로 여기서는 sudo 를 붙여주었습니다.
규칙
위 그림처럼 분, 시, 일, 월, 요일, 명령 순서로 기재하면 됩니다.
예를 들어, /home/user/run.sh를 실행하고 싶다면
# 매 시 10분에
$ 10 * * * * /home/user/run.sh
# 10분 마다 주기적으로
$ */10 * * * * /home/user/run.sh
# 토요일 새벽 3시에
$ 0 3 * * 6 /home/user/run.sh
이렇게 하면 됩니다.
인증서 갱신하기
만약 매월 1일 03시에 인증서를 갱신하고 싶다면 아래와 같이 설정하면 됩니다.
$ 0 18 1 * * /usr/bin/certbot renew --renew-hook="sudo systemctl restart apache2"
위에 새벽 3시인데 크론탭에는 18시라고 쓴 것은 서버 시간에 맞췄기 때문입니다. date 명령으로 자신의 서버 시간을 확인하고 시간을 설정하세요. 이 페이지에서 시간을 쉽게 변환해볼 수 있습니다.
뒤에 나오는 –renew-hook은 인증서 갱신을 성공적으로 마치면 아파치를 재시작하기 위해 넣어주었습니다. 인증서 갱신 전에 실행되는 --pre-hook도 있습니다.