Certbot을 활용해 Ubuntu 서버에서 SSL 인증서를 자동으로 갱신하는 방법을 단계별로 안내합니다.
Certbot을 사용한 SSL 인증서 갱신 가이드
SSL 인증서는 웹사이트 보안에 필수적입니다. 인증서를 정기적으로 갱신하지 않으면 사이트 방문자들이 ‘신뢰할 수 없는 사이트’ 경고를 받을 수 있습니다. 이번 포스트에서는 Certbot을 사용해 Ubuntu 서버에서 SSL 인증서를 자동으로 갱신하는 방법을 알아보겠습니다.
1. SSL 인증서 오류 해결: ERR_CERT_AUTHORITY_INVALID
SSL 인증서가 만료되었을 때 종종 발생하는 오류 중 하나가 ERR_CERT_AUTHORITY_INVALID입니다. 이 오류는 신뢰할 수 없는 인증 기관에서 발급된 인증서 또는 만료된 인증서에서 주로 발생합니다. 이를 해결하기 위해서는 인증서를 갱신해야 합니다.
Ubuntu 환경에서 Let’s Encrypt와 Certbot을 사용하면 무료로 SSL 인증서를 발급받을 수 있으며, 이를 주기적으로 갱신하는 설정을 자동화할 수 있습니다.
2. Certbot 설치 및 설정
Certbot은 Let’s Encrypt와 같은 인증 기관(CA)에서 SSL 인증서를 발급받고 갱신하는 데 사용되는 도구입니다. Ubuntu 서버에서 Certbot을 설치하려면 다음과 같이 명령어를 실행합니다:
$ sudo apt update
$ sudo apt install certbot
Certbot 설치가 완료되면 이제 SSL 인증서를 발급받고, 자동으로 갱신되도록 설정할 수 있습니다.
3. Certbot을 사용한 SSL 인증서 발급
서버에 Certbot이 설치되면 Nginx 또는 Apache와 같은 웹 서버에 인증서를 발급할 수 있습니다. 아래는 Nginx를 사용하는 경우의 예시입니다.
$ sudo certbot --nginx -d example.com -d www.example.com
위 명령어는 example.com과 www.example.com 도메인에 대한 인증서를 발급하고 Nginx 설정을 자동으로 갱신합니다.
4. SSL 인증서 자동 갱신 설정
Certbot은 기본적으로 인증서를 자동으로 갱신할 수 있는 기능을 제공합니다. 하지만 서버가 새로운 인증서를 인식하도록 하기 위해 추가 설정이 필요합니다. 여기서 crontab을 활용해 주기적으로 인증서를 갱신하고 서버를 재시작하는 작업을 자동화할 수 있습니다.
$ sudo crontab -e
위 명령어를 실행해 crontab 파일을 열고 다음 내용을 추가합니다:
0 3 1 * * root certbot renew --quiet --deploy-hook "/path/to/restart_script.sh"
- 0 3 1 * *: 매달 1일 오전 3시에 작업을 실행하도록 스케줄링
- certbot renew --quiet: 인증서 갱신 시 필요한 출력만 표시하도록 설정
- --deploy-hook "/path/to/restart_script.sh": 인증서 갱신 후 서버 재시작을 위한 스크립트 실행
5. Certbot 갱신 후 서버 재시작
모든 서버가 SSL 인증서 갱신 후 반드시 재시작해야 하는 것은 아닙니다. 예를 들어, Nginx는 설정 파일을 재로딩하는 것만으로도 갱신된 인증서를 반영할 수 있습니다. 따라서 다음 명령어를 사용해 Nginx를 재시작하지 않고 설정을 다시 로드할 수 있습니다:
$ sudo nginx -s reload
이 명령어는 서버를 재시작하지 않고 설정만 새로 적용하므로 더 빠르고 안전한 방법이 될 수 있습니다.
6. Certbot 갱신 오류 해결
때때로 Certbot을 사용해 인증서를 갱신할 때 오류가 발생할 수 있습니다. 대표적인 오류로는 다음과 같은 경우가 있습니다:
- 도메인 소유권 인증 실패: 도메인 DNS 설정이 제대로 되어 있지 않을 때 발생할 수 있습니다.
- 인증서 만료 기간 초과: 인증서가 이미 만료된 경우 갱신이 실패할 수 있습니다.
이 경우, /var/log/letsencrypt/letsencrypt.log 로그 파일을 확인하거나 Certbot을 verbose 모드로 실행해 오류 원인을 확인할 수 있습니다.
$ sudo certbot renew --verbose
7. 재시작 Script 예시
#!/bin/bash
# Node.js 서버 재시작
echo "Restarting Node.js Server...."
# Node.js 서버 실행 중인 프로세스 종료
sudo pkill -f "node server/server"
# Node.js 서버 다시 시작
cd /home/ubuntu/node_server && nohup node server/server > out.log 2>&1 &
echo "Node.js server restarted."
8. 결론
Certbot을 사용하면 SSL 인증서를 손쉽게 갱신하고, 서버를 안전하게 유지할 수 있습니다. 특히 Let’s Encrypt와의 연계를 통해 무료로 인증서를 발급받고, 주기적인 자동 갱신 설정을 통해 관리 부담을 크게 줄일 수 있습니다. 정기적인 SSL 인증서 갱신은 웹사이트 보안 유지에 필수적이므로 자동화를 적극 활용해 효율적으로 관리하세요.