Linux,Unix,BSD

[script] Let's Encrypt SSL 인증서 갱신 스크립트

채윤아빠 2022. 1. 25. 08:00
728x90
반응형

개요

매 3개월 주기별로 Let's Encrypt SSL 인증서를 갱신할 때마다 일일이 명령어를 쳤던 것을 언젠가 스크립트로 만둘어 두어야 겠다고 생각을 했지만, 게을러서 못만들고 있다가 새로 작성한 것을 정리하여 공유합니다.


스크립트 작성

작성한 전체 스크립트 코드는 다음과 같습니다.

#!/bin/bash

TARGET_DOMAIN='my.domain'
HOME_LETS_ENCRYPT='/share/letsencrypt'
TARGET_SSL_DIR='/etc/haproxy/ssl'
BACKUP_SSL_DIR='/share/backup/ssl'

read -ps "https://www.gabia.com/ 을 브라우저로 실행하고 를 입력하세요 :"

docker run -it --rm --name certbot \
    -v '${HOME_LETS_ENCRYPT}:/etc/letsencrypt' \
    -v '${HOME_LETS_ENCRYPT}/lib:/var/lib/letsencrypt' \
    -v '${HOME_LETS_ENCRYPT}/log:/var/log/letsencrypt' \
    certbot/certbot certonly \
    --manual --preferred-challenges dns -d '*.${TARGET_DOMAIN}' \
    --server https://acme-v02.api.letsencrypt.org/directory

read -ps "SSL 인증서 발급이 정상이면 를 입력하세요 :"

cd ${HOME_LETS_ENCRYPT}/live/${TARGET_DOMAIN}
cat cert.pem chain.pem privkey.pem > ${TARGET_DOMAIN}.pem
rm -f ${TARGET_SSL_DIR}/${TARGET_DOMAIN}.pem
cp ${TARGET_DOMAIN}.pem ${TARGET_SSL_DIR} # 새로운 SSL 인증서 적용
mv ${TARGET_DOMAIN}.pem ${BACKUP_SSL_DIR}/${TARGET_DOMAIN}.pem-$(date +%Y%m%d) # 새로운 인증서 백업
systemctl reload haproxy # HAProxy 새시작으로 새로운 SSL 인증서가 웹 서비스에 반영되도록 함

Let's Encrypt SSL 인증서를 갱신하는 과정에서 도메인 서비스의 "_acme-challenge" TXT 레코드에 할당된 값을 변경해야 하기 때문에 먼저 브라우저로 도메인 서비스 관리자인 가비아를 실행하라고 안내 문구를 출력하고 대기하도록 합니다.

그리고 "certbot/certbot" 도커 컨테이너를 활용하여, Let's Encrypt SSL 인증서 갱신작업을 시작합니다.

"DNS TXT" 레코드 변경 절차를 위하여 코드가 발급되면 해당 코드를 복사하여 미리 실행해둔 가비다 도메인 관리서비스에서 "_acme-challenge" TXT 레코드의 값을 변경한 뒤에 "" 키를 입력합니다.

"Successfully received certificate." 문구가 나오면, Let's Encrypt SSL 인증서 갱신이 정상적으로 이루어진 것입니다.

이후 갱신된 SSL 인증서 파일을 "*.pem" 형식의 파일로 만들어서 웹 서비스에 반영하면 됩니다.

저의 경우에는 HAProxy가 앞단에서 처리하고 있어서 "*.pem" 형식의 SSL 인증서 파일을 HAProxy 설정 폴더로 복사하고, 혹시 몰라 백업해 두도록 하였습니다.