인증서 관리와 자동 업데이트 설정
1. 현재 인증서 확인
명령어 certbot certificates
간단한 것부터 시작하자: 서버에 이미 설치된 인증서를 어떻게 확인할 수 있을까? Let's Encrypt는 certbot
이라는 편리한 도구를 제공한다. certbot certificates
명령어를 사용하면 현재 인증서에 대한 자세한 정보를 얻을 수 있어.
sudo certbot certificates
결과는 대략 이런 식으로 나타날 거야:
Found the following certs:
Certificate Name: example.com
Domains: example.com www.example.com
Expiry Date: 2023-12-31 10:00:00+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/example.com/privkey.pem
여기엔 중요한 정보가 포함돼 있어:
- 인증서 이름.
- 인증서가 적용되는 도메인.
- 만료 날짜 (제때 갱신할 수 있도록).
- 인증서 파일과 개인 키에 대한 경로.
유용한 팁:
만료 알림을 무시하는 습관이 있다면 이 명령어는 최고의 친구가 될 거야. 만료된 인증서에 대해 화난 사용자로부터 알게 되는 프로그래머가 되고 싶은 사람은 없잖아.
2. 인증서 자동 갱신
Let's Encrypt 내부
Let's Encrypt 인증서는 보안 위험을 줄이기 위해 90일 동안만 유효해. 하지만 3개월마다 수동으로 갱신하는 건 너무 번거롭잖아. 다행히도, 자동화를 위해 내장 명령어를 사용할 수 있어:
sudo certbot renew
이 프로세스는 모든 인증서를 검사하고, 만료일이 가까운 인증서를 자동으로 갱신해줘.
Cron
을 사용한 자동 갱신 설정
Cron
은 Linux에서 작업을 예약하는 데 사용되는 내장 도구야. 명령어를 일정에 따라 실행할 수 있어서, 인증서 갱신 자동화에 딱이야. 이렇게 설정하면 돼:
현재 사용자용
Cron
편집기를 열어:sudo crontab -e
파일 마지막에 다음 줄을 추가해:
0 0 * * * certbot renew --quiet
이 명령어는
certbot renew
를 매일 자정에 실행해.--quiet
플래그는 필요 없는 출력을 억제해서 갱신이 조용히 이루어지도록 해줘.변경 사항을 저장하고 편집기를 닫아.
이제 서버가 인증서를 자동으로 갱신하니까, 만료일 걱정은 안 해도 돼 (거의).
3. 인증서 수동 업데이트
가끔은 자동화로 모든 문제가 해결되지 않고 인증서를 수동으로 업데이트해야 할 때가 있어. 예를 들어, 방금 사이트 구성에 새 도메인을 추가했다면 새로운 인증서를 수동으로 요청해야 해. 이때 다시 certbot
이 도움을 줘:
명령어 예시:
sudo certbot renew
특정 도메인의 인증서 갱신
특정 도메인과 연결된 인증서를 갱신해야 한다면, 다음 형식의 요청을 사용해:
sudo certbot certonly --nginx -d example.com -d www.example.com
여기에서:
--nginx
는 설정이 Nginx 서버에 자동으로 적용된다는 것을 나타내. Apache를 위한 옵션은--apache
야.-d
플래그는 인증서가 필요한 도메인을 나열하는 데 사용돼.
명령어 실행 후 Certbot은 서버 설정을 확인하고 새 인증서를 요청하며 이를 설정할 거야.
4. 알림 및 모니터링
Email 알림
Certbot을 설치할 때 이메일 주소를 입력하라고 요청했을 거야. 이메일을 입력했다면, 인증서가 만료되기 20일 전에 알림을 받을 거야. 만약 이메일을 입력하지 않았거나 변경하고 싶다면 다음과 같은 명령어를 사용하면 돼:
sudo certbot register --update-registration --email newaddress@example.com
이제 어떤 상황에서도 당황하지 않을 거야. 뭐, 거의.
외부에서 확인하기
인증서 유효기간을 추적하는 데 도움을 줄 수 있는 외부 서비스들이 있어. 예를 들어, SSL Labs. 사이트 주소를 입력하면 인증서의 유효기간, 신뢰 체인, 보안 수준 등을 확인할 수 있어.
5. 필요 없는 인증서 삭제
때로는 이전 인증서가 불필요해질 수 있어. 예를 들어, 더 이상 특정 도메인을 서비스하지 않는 경우 말이야. 시스템을 깔끔하게 유지하려면 이러한 인증서를 삭제하는 게 좋아.
삭제 명령어:
sudo certbot delete
Certbot은 사용 가능한 인증서 목록을 보여주고, 어떤 것을 삭제할지 선택하도록 해줄 거야.
유용한 팁:
인증서를 삭제할 때는 작업 중인 사이트가 갑자기 중단되지 않도록 주의해야 해. 항상 인증서가 더 이상 사용되지 않는지 확인해.
6. 예제 및 오류 디버깅
업데이트 후 확인
인증서를 수정하거나 업데이트한 후에는 항상 사이트가 정상적으로 작동하는지 확인해야 해. 가장 간단한 방법은 curl
을 사용하는 거야:
curl -I https://example.com
기대되는 결과 — 코드 HTTP/1.1 200 OK
.
뭔가 잘못되었다면, 먼저 로그를 확인해봐:
Nginx 용:
sudo tail -f /var/log/nginx/error.log
Apache 용:
sudo tail -f /var/log/apache2/error.log
자주 발생하는 오류: "Too Many Requests"
너무 자주 새로운 인증서를 요청하면, Let's Encrypt에서 "Too Many Requests" 오류로 접근을 차단할 수도 있어. 이런 경우에는 Let's Encrypt 테스트 서버를 사용하는 것이 추천돼:
sudo certbot certonly --test-cert --nginx -d example.com
이 명령은 실제 사용에는 유효하지 않은 테스트 인증서를 발급하지만, 설정을 확인하는 데 도움이 돼.
7. 마지막 단계: 웹 서버의 자동 재시작
Let's Encrypt는 인증서 파일을 갱신하지만, Nginx나 Apache와 같은 웹 서버는 재시작되기 전까지 변경 사항을 확인하지 못해. 이것도 자동화할 수 있어. Cron 기록을 업데이트하자:
0 0 * * * certbot renew --quiet && systemctl reload nginx
또는 Apache의 경우:
0 0 * * * certbot renew --quiet && systemctl reload apache2
이제 인증서가 갱신되면 서버에 바로 적용될 거야.
이 강의는 밤에 편히 잘 수 있도록 설정됐어. 인증서가 자동으로 갱신되고, 사이트가 보호되며, 새벽 3시에 상사가 "사용자들이 사이트가 접속이 안 된대."라고 말하며 전화하는 일을 피할 수 있어. 인증서 관리는 실제 업무에서 유용한 기술이고, 대규모 웹 애플리케이션 배포나 DevOps 엔지니어링을 계획하고 있다면 특히 중요한 스킬이야.
GO TO FULL VERSION