let's encrypt 자동 갱신 설정: 만료일자 확인 후 수행

Wookoa 2024. 3. 10.

lets encrypt 자동 갱신 설정
lets encrypt 자동 갱신 설정

머리말

  웹 서비스를 위해 SSL 프로토콜 보안 설정은 더 이상 옵션이 아니다. 현존하는 모든 브라우저가 앞다투어 보안 프로토콜이 적용되지 않은 웹 사이트는 자체적으로 위험한 사이트로 판단하고 사용자의 접근을 차단한다. 사용자가 보안 프로토콜이 적용되지 않아도 무시하고 웹 사이트에 접근할 수 있지만, 이미 새빨간 화면으로 위험성을 경고하니 사용자가 경고를 무시하고 접근하기는 쉽지 않을 것이다. 자신의 웹 서비스를 정상적으로 운영하기 위해서는 SSL 보안 프로토콜 적용이 필수인데 비용이 만만치 않다. 이러한 상황을 해결하기 위해 let's encrypt 재단이 보안 인증서를 무료로 제공하기에 이르렀다. 무료로 제공받은 보안 인증서는 90일마다 새로운 인증서로 교체해야 되는 번거로움이 있다. 재단 측 설명에 의하면 유료 서비스로 유도하기 위한 수단은 아니며, 항상 최신의 보안 인증서를 유지할 수 있도록 90일간 만료일자를 제한했다고 한다. 재단 측의 설명이 충분히 이해되는 것이, 명령어 한 줄이면 보안 인증서는 자동으로 갱신된다. 본 포스팅에서는 let's encrypt 재단에서 배포하는 무료 보안 인증서를 자동으로 갱신하는 방법에 대해서 소개하도록 한다.

let's encrypt 인증서 자동 갱신 방법

  let's encrypt 재단에서 무료로 배포하는 보안 인증서는 명령어 한 줄이면 새로운 보안 인증서로 갱신할 수 있다. 하지만 매번 갱신되는 만료일자 90일마다 서버에 접근해서 인증서 갱신 명령어를 수행하는 일조차 번거로울 수 있다. 자칫 기한을 지키지 못한다면 자신의 웹 서비스가 정상적으로 운영되지 않을 것을 생각하면 끔찍하다. 때문에 많은 블로그에서는 자동으로 인증서를 갱신하는 방법에 대해서 소개하지만, 만료일자를 체크하지 않고 인증서 갱신 명령어를 매일 수행하는 방법이 주를 이룬다.

  물론 매일 혹은 매주마다 인증서 갱신 명령어를 반복해서 수행해도 큰 문제는 되지 않는다. 다만, 자신의 서버에서 불필요한 작업과 로그가 발생하기 때문에 자신에게 적합한 방법이 아니라고 생각되면 본 포스팅이 도움이 되었으면 좋겠다. 아래와 같이 만료일자를 확인 후, 만료 30일 전이라는 조건에 부합하면 인증서를 갱신하는 로직을 소개한다.

  #!/bin/bash
  
  CHECK_DAYS=`sudo certbot certificates | grep VALID`
  CHECK_DAYS="${CHECK_DAYS#*VALID: }"
  CHECK_DAYS="${CHECK_DAYS%% days*}"

  if [ $CHECK_DAYS -lt 29 ];then
      sudo rm -rf /var/log/letsencrypt/letsencrypt.log_backup
      sudo mv /var/log/letsencrypt/letsencrypt.log /var/log/letsencrypt/letsencrypt.log_backup

      sleep 1
      sudo certbot renew

      sleep 1
      sudo pkill -f node

      sleep 1
      cd /home/wookoa_software/wookoa
      nohup sudo -E node ./web.js &
  fi

  매우 간단한 로직으로 수행된다. 인증서의 상태를 체크하는 명령어를 수행 후, 리턴되는 메시지를 VALID 키워드로 파싱해서 만료일자를 확인한다. 인증서 갱신은 만료일자 30일 이내에만 수행되기 때문에 29 보다 작으면 분기문이 수행되는 구조다. 물론 본 로직에도 구멍이 존재하는데, 리턴되는 메시지에 VALID 키워드가 변경되면 정상적으로 동작하지 않는다. 본인은 위와 같은 로직으로 3년간 웹 서비스를 운영한 결과 특이사항은 없었지만, 그러한 경우를 대비해 로직을 보강하면 조금 더 좋은 코드가 완성될 것이라 생각된다.

꼬리말

  위에서 작성한 쉘 스크립트 로직을 리눅스 스케줄 시스템은 Crontab에 등록해서 일주일 단위로 수행하면 적당할 것 같으며, VALID 키워드 파싱 결과에 문제가 발생하면 자신이 인지할 수 있도록 관제하는 로직도 추가되면 좋을 것 같다. 비교적 단순한 방법으로 인증서 만료일자를 체크한 뒤, 조건에 부합하면 인증서를 갱신하는 방법에 대해서 소개한 본 포스팅은 이로써 마무리를 짓도록 한다.

인기있는 글

소중한 댓글 (0)