1. SSL 인증서, 꼭 돈 내고 사야 하나?
얼마 전까지만 해도 SSL 인증서는 연간 수십만 원을 내고 구입하는 유료 상품이었습니다. 중소규모 사이트 운영자에게는 부담스러운 비용이었습니다.
2016년 Let’s Encrypt의 등장으로 상황이 완전히 바뀌었습니다. 완전 무료로 SSL 인증서를 발급해주는 공인 기관이 생겼고, 현재는 전 세계 수억 개 이상의 사이트가 Let’s Encrypt 인증서를 사용하고 있습니다.
2. Let’s Encrypt란 무엇인가?
Let’s Encrypt는 모질라 재단, 전자 프런티어 재단(EFF), 시스코 등이 지원하는 비영리 인증 기관(CA)입니다. 웹 보안을 보편화하기 위해 누구에게나 무료로 SSL 인증서를 발급합니다.
Let’s Encrypt 인증서의 특징을 정리하면 다음과 같습니다. 완전 무료이며 도메인 소유권을 자동으로 검증합니다. 유효 기간은 90일이지만 자동 갱신을 설정하면 만료 걱정이 없습니다. Chrome, Firefox, Safari 등 모든 주요 브라우저에서 신뢰하는 인증서입니다. 개인 블로그부터 소규모 쇼핑몰까지 대부분의 사이트에 적합한 DV(도메인 검증) 인증서입니다.
3. 발급 전 준비 사항 체크리스트
SSL 인증서를 발급받기 전에 아래 사항을 모두 확인해야 합니다.
도메인 보유 필수 Let’s Encrypt는 IP 주소가 아닌 도메인에 인증서를 발급합니다. 아직 도메인이 없다면 먼저 도메인을 구입하고 서버 IP에 연결해야 합니다.
DNS 전파 완료 확인 도메인이 서버 IP를 정확히 가리키고 있어야 합니다. Let’s Encrypt가 인증서 발급 전에 도메인으로 직접 접속해 소유권을 검증하기 때문입니다. nslookup 도메인주소로 올바른 서버 IP가 반환되는지 확인합니다.
Nginx 실행 중 확인 서버에서 Nginx가 정상 실행 중이어야 합니다. sudo systemctl status nginx로 확인합니다.
80번 포트 개방 확인 Let’s Encrypt의 소유권 검증은 80번 포트를 통해 이루어집니다. 방화벽과 클라우드 보안 그룹 모두에서 80번 포트가 열려 있어야 합니다.
4. Certbot 설치하기
Certbot은 Let’s Encrypt 인증서 발급과 갱신을 자동화해주는 공식 도구입니다.
패키지 목록을 업데이트합니다.
sudo apt update
Certbot과 Nginx 플러그인을 함께 설치합니다.
sudo apt install certbot python3-certbot-nginx -y
설치 완료 후 버전을 확인합니다.
certbot –version
버전 정보가 출력되면 정상 설치된 것입니다.
5. 인증서 발급과 Nginx 자동 설정
아래 명령어 하나로 인증서 발급, Nginx 설정 수정, HTTPS 리다이렉트 설정까지 모두 자동으로 처리됩니다.
sudo certbot –nginx -d 도메인주소 -d www.도메인주소
명령 실행 중 몇 가지 질문에 답해야 합니다.
첫 번째 질문은 이메일 주소 입력입니다. 인증서 만료 알림을 받을 이메일을 입력합니다.
두 번째 질문은 이용 약관 동의입니다. A를 입력해 동의합니다.
세 번째 질문은 뉴스레터 수신 여부입니다. N을 입력해 거부합니다.
네 번째 질문은 HTTP를 HTTPS로 리다이렉트할지 여부입니다. 2번을 선택하면 http://로 접속해도 자동으로 https://로 이동합니다.
Successfully deployed certificate 메시지가 나타나면 발급 완료입니다.
6. HTTPS 적용 확인하기
발급이 완료되면 브라우저에서 도메인에 접속해 확인합니다.
주소창에 자물쇠 아이콘이 표시되면 HTTPS가 정상 적용된 것입니다. http://로 접속하면 자동으로 https://로 이동하는지도 확인합니다.
더 상세한 SSL 보안 등급을 확인하려면 SSL Labs(ssllabs.com/ssltest)에서 도메인을 입력해 검사할 수 있습니다. A 등급 이상이 나오면 양호한 설정입니다.
7. 인증서 자동 갱신 확인
Let’s Encrypt 인증서는 90일마다 갱신이 필요합니다. Certbot은 설치 시 자동 갱신 타이머를 등록해두기 때문에 별도 작업 없이 자동으로 갱신됩니다.
자동 갱신 서비스가 활성화되어 있는지 확인합니다.
sudo systemctl status certbot.timer
active 상태이면 정상입니다.
실제 갱신 없이 갱신 과정이 정상 작동하는지 시뮬레이션해봅니다.
sudo certbot renew –dry-run
Congratulations, all simulated renewals succeeded 메시지가 나오면 자동 갱신이 정상적으로 설정된 것입니다.
8. 자주 만나는 오류와 해결법
도메인 연결 실패 오류 Let’s Encrypt가 도메인으로 접속을 시도했는데 실패한 경우입니다. DNS가 아직 전파되지 않았거나 80번 포트가 차단된 경우가 원인입니다. DNS 전파를 기다리거나 방화벽 설정을 확인합니다.
발급 횟수 초과 오류 같은 도메인에 주당 5회 이상 발급을 시도하면 일시적으로 차단됩니다. --dry-run 옵션을 활용해 실제 발급 전에 테스트를 먼저 진행합니다.
Nginx 설정 오류로 재시작 실패 Certbot이 Nginx 설정을 수정한 후 문법 오류가 생긴 경우입니다. sudo nginx -t로 오류 위치를 확인하고 수정합니다.
인증서 경로 관련 오류 기존에 수동으로 설치한 SSL 인증서와 충돌하는 경우입니다. /etc/nginx/sites-available/ 설정 파일에서 기존 SSL 설정을 제거하고 다시 시도합니다.
9. 정리 및 다음 단계
오늘 배운 핵심을 정리합니다.
- Let’s Encrypt는 무료로 SSL 인증서를 발급해주는 비영리 인증 기관입니다.
- Certbot을 사용하면 인증서 발급, Nginx 설정, 자동 갱신을 모두 자동화할 수 있습니다.
- 발급 전에 도메인 DNS 연결, 80번 포트 개방, Nginx 실행을 반드시 확인합니다.
sudo certbot renew --dry-run으로 자동 갱신이 정상 작동하는지 주기적으로 확인합니다.
다음 글에서는 공용 와이파이 환경에서 안전하게 서버를 관리하고 인터넷을 사용하는 방법을 알아보겠습니다.