예전에 아파치나 NginX 같은 웹서버 없이 Spring Boot으로 만든 웹 어플리케이션에 무료 SSL 중 하나인 Let's Encrypt을 적용한적이 있었습니다.
90일동안 사용가능하며 다시 갱신을 시켜줘야하나? 싶었지만 간단한 설정으로 자동갱신까지 가능하니 참 괜찮았던 것 같아 소개하고자 글을 포스팅합니다.
그리고 Let's Encrypt SSL 인증서 발급 방법은 여러가지가 있는데 그 중 standalone 방식을 택했습니다.
1) standalone
. 사이트 작동을 멈추고 이 사이트의 네크워킹을 이용해 사이트 유효성을 확인해 Let’s Encrypt SSL 인증서를 발급하는 방식
. 80포트로 가상 standalone 웹서버를 띄워 인증서를 발급
. 이 방식은 동시에 여러 도메인을 발급 받을 수 있음
. 자동갱신 가능
2) webroot
. 사이트 디렉토리 내에 인증서 유효성을 확인할 수 있는 파일을 업로드하여 인증서를 발급
. 실제 작동하고 있는 웹서버의 특정 데렉토리의 특정 파일 쓰기 작업을 통해서 인증
. 이 방식의 장점은 서버를 중단없이 발급 가능
. 이 방법의 단점은 인증 명령에 하나의 도메인 인증서만 발급 가능
. 자동갱신 가능
3) DNS
. 도메인을 쿼리해 확인되는 TXT 레코드로 사이트 유효성을 확인하는 방법
. 와일드 카드 방식으로 인증서를 발급 가능
. 이 방법은 당연하게도 서버 관리자가 도메인 DNS를 관리/수정할 수 있어야 하며
. 인증서 갱신 시마다 DNS에서 TXT값을 변경해야 함
이제부터 standalone 방식으로 인증서를 발급받아 SSL을 적용해보겠습니다.
(적용하기 위해 이미 웹 어플리케이션은 배포된 상태여야 하며, 도메인 주소를 가지고 있어야 합니다. )
# -p 뒤에 포트번호를 넣으면 됩니다.
ssh username@ip주소 -p 1234
sudo apt-get install certbot
sudo certbot certainly --standalone
위 그림처럼 입력하면 이메일을 입력하라고 나타나고 이메일을 입력하면 됩니다.
곧이어 동의 절차글이 나타납니다. A, Y를 차례대로 입력하고 마지막으로 ssl 인증설르 발급받을 도메인을 입력하면 됩니다.
여러개 입력 가능합니다. ex) naver.com www.naver.com
위처럼 Congratulations!! 문구가 뜨면 성공입니다!
그리고 /etc/letsencrypt/live/도메인/ 경로에 fullcahin.pem과 privkey.pem 가 발급되었다고 안내합니다.
위에서 알려주는 경로로 이동해봅시다. (live 폴더 이상 안들어가진다면 접근권한이 없는 것이므로 sudo -i로 접근하거나 root로 들어가면 live폴더 이상 접근 가능합니다.)
-fullchain.pem, privkey.pem 등이 발급받아진 경로로 이동 한 뒤 아래 명령어를 입력하면 keystore.p12 파일이 생성됩니다.
sudo openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name ttp -CAfile chain.pem -caname root
저는 FileZilla를 통해 keystore.p12이 있는 경로로 가서 로컬로 가져오는 방식을 택했습니다.
server:
port: 443
ssl:
key-store: classpath:ssl/keystore.p12
key-store-type: PKCS12
key-store-password: 변환후입력헀던비밀번호
이제 웹 어플리케이션을 배포해서 https 까지 붙였을때 잘 뜨면 성공입니다.
# Crontab 보기
$ crontab -l
# Crontab 편집
$ crontab -e
crontab -e 로 편집 모드로 들어갑니다.
그 다음 매달 1일에 자동 갱신 될 수 있는 아래 명령어를 입력하고 저장 후 나오면 끝!
$ 0 2 1 * * /usr/bin/certbot renew
인증서 만료일 확인하기
Certbot으로 부터 발급받은 인증서들에 대한 정보를 표시합니다.
$ certbot certificates
인증서 갱신 모의 테스트
인증서 renew 갱신이 제대로 동작하는지 테스트 해볼 수 있습니다.
certbot renew --dry-run
만약 certbot renew 도중 아래와 같은 에러가 발생한다면?
Attempting to renew cert (www.도메인.kr) from /etc/letsencrypt/renewal/www.도메인.kr.conf produced an unexpected error:
Problem bindging to port 80: Could not bind to IPv4 or IPv6......
apache2를 중단 하고 다시 실행해봅시다.
systemctl stop apache2.service
그리고 다시 certbot renew 로 실행하면 Congratulations, all renewals succeeded ..... 등의 내용이 뜨게 됩니다.
좀 예전에 적용했던 부분이라 내용설명이 부족했지만, 궁금한 점 있으면 댓글 부탁드립니다.
여기서 포스팅을 마치겠습니다.
안녕하세요
올려주신 글 잘 봤습니다.
중간에 오타가 있네요
sudo certbot certainly --standalone
->sudo certbot certonly --standalone