SSL 인증서 만료 시 자동 갱신 문제

윤준혁·2024년 7월 25일
post-thumbnail

문제 상황

  • CertBot을 사용해 SSL 인증서를 받았지만, Let's Encrypt에서 발급하는 모든 SSL 인증서는 만료 기한이 90일이므로 90일마다 서버에 접속해서 갱신해줘야한다
  • 자동으로 SSL 인증서를 갱신한다면 그럴 필요가 없다고 생각했다

  • sudo certbot certificates을 사용하면 만료기한을 확인할 수 있음

해결 방법

  • 다양한 방법이 있겠지만 내가 선택한 방법은 매일 자정에 자동으로 SSL 인증서를 갱신하고, 실패했을 경우 메일로 알림을 보내는 방식이다

sudo apt-get update
sudo apt-get install -y postfix
sudo apt install -y mailutils

  • 시스템에 Postfix라는 MTA(Mail Transfer Agent)와 mailutils를 설치한다

  • Internet Site를 선택해주고 Enter

  • 내 도메인을 입력해준다(없으면 퍼블릭 IP 또는 관련 도메인)

sudo nano /etc/postfix/main.cf

  • Postfix 설정 파일을 확인한다
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

append_dot_mydomain = no

readme_directory = no

compatibility_level = 3.6

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may

smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=encrypt
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination

myhostname = mail.{my_domain}
mydomain = {my_domain}
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = {SMTP가 허용된 email}
mydestination = $myhostname, $mydomain, localhost.$mydomain, localhost
relayhost = [smtp.naver.com]:465
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_wrappermode = yes
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
inet_protocols = ipv4
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
  • 전체 main.cf 코드
  1. sudo nano /etc/postfix/sasl_passwd
  2. 내용) [smtp.naver.com]:465 {SMTP가 허용된 email}:{SMTP가 허용된 email의 password}
  3. sudo chmod 600 /etc/postfix/sasl_passwd
  4. sudo postmap /etc/postfix/sasl_passwd
  • (1)SMTP 서버에 인증 정보를 저장하는 파일을 생성
  • (2)내용 작성
  • (3)권한 부여
  • (4)Postfix가 인증 정보를 읽을 수 있도록 데이터베이스 파일 생성

sudo systemctl restart postfix

  • Postfix를 다시 시작한다

crontab -e


0 0 * * * /usr/bin/certbot renew --quiet --renew-hook "systemctl reload nginx" || echo "CertBot renewal failed" | mail -s "CertBot Renewal Alert" your-email@example.com -aFrom:{SMTP가 허용된 email}

  • crontab -e 로 크론 작업 파일을 열어서 다음의 명령어를 추가해준다

echo "Test email body" | mail -s "Test email subject" your-email@example.com -aFrom:{SMTP가 허용된 email}

  • 설정이 완료되면 메일을 테스트해본다

결과

  • 성공적으로 메일을 발신하였다
  • 앞으로 문제가 생기지 않으면 서버에 들어갈 일이 점차 줄어들 것이다

추가

  • 실패했다는 메일을 받을 수 있었는데 만료일이 30일 이상 남은 경우에는 인증서를 갱신할 필요가 없다고 판단해서 갱신하지 않는다

0개의 댓글