일본 서버에서 웹 서비스를 운영할 때 SSL 인증서는 필수입니다. HTTPS가 없으면 브라우저에서 “안전하지 않음” 경고를 표시하고, 구글 검색 순위에도 불이익이 생깁니다. 이 글에서는 일본 서버(Ubuntu + Nginx 기준)에서 SSL 인증서를 설정하는 방법을 안내합니다.
SSL 인증서가 필요한 이유
- 보안: 클라이언트와 서버 간 통신 암호화
- SEO: 구글은 HTTPS 사이트를 검색 순위에서 우대
- 신뢰성: 브라우저 주소창의 자물쇠 아이콘
- 필수 요건: 결제 페이지, 로그인 페이지는 HTTPS 필수
Let’s Encrypt 무료 SSL 인증서
Let’s Encrypt는 비영리 인증기관(CA)에서 제공하는 무료 SSL 인증서로, 90일마다 자동 갱신이 가능합니다. 상업용 유료 인증서와 동일한 수준의 보안을 제공합니다.
Certbot 설치
apt install certbot python3-certbot-nginx -y
단일 도메인 인증서 발급
certbot --nginx -d yourdomain.com -d www.yourdomain.com
Certbot이 자동으로:
- 도메인 소유권 확인 (Let’s Encrypt ACME 챌린지)
- 인증서 발급
- Nginx 설정에 SSL 추가
- HTTP → HTTPS 리다이렉트 설정
Nginx SSL 설정 최적화
Certbot이 자동으로 설정하지만, 보안 강도를 높이려면 다음 설정을 추가합니다:
server {
listen 443 ssl http2;
server_name yourdomain.com;
# 인증서 경로 (Certbot이 자동 설정)
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
# 강화된 SSL 설정
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# HSTS (HTTPS 강제)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# OCSP Stapling (인증서 검증 속도 향상)
ssl_stapling on;
ssl_stapling_verify on;
# 세션 캐시 (TLS 핸드셰이크 재사용)
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
}
# HTTP → HTTPS 리다이렉트
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
와일드카드 SSL 인증서 (*.yourdomain.com)
서브도메인이 여러 개인 경우(api.yourdomain.com, shop.yourdomain.com 등) 와일드카드 인증서 하나로 모두 커버할 수 있습니다.
와일드카드 인증서는 DNS TXT 레코드 챌린지 방식으로 발급합니다:
certbot certonly --manual --preferred-challenges dns \
-d yourdomain.com \
-d "*.yourdomain.com"
발급 과정에서 DNS 제공업체에서 TXT 레코드를 추가하라는 안내가 나옵니다. 추가 후 Enter를 누르면 인증서가 발급됩니다.
SSL 인증서 자동 갱신
Let’s Encrypt 인증서는 90일마다 갱신이 필요합니다. Certbot이 자동 갱신 타이머를 등록하지만, 정상 동작하는지 확인하세요:
# 갱신 테스트 (실제로 갱신하지 않음)
certbot renew --dry-run
# 갱신 타이머 상태 확인
systemctl status certbot.timer
수동 갱신이 필요한 경우:
certbot renew
systemctl reload nginx
crontab으로 추가 자동화:
# crontab -e
0 3 * * * certbot renew --quiet && systemctl reload nginx
SSL 인증서 설정 확인
설정이 완료되면 다음 도구로 검증하세요:
- SSL Labs:
https://www.ssllabs.com/ssltest/— A+ 등급 목표 - 명령줄 테스트:
curl -I https://yourdomain.com openssl s_client -connect yourdomain.com:443 -brief
자주 발생하는 오류와 해결법
| 오류 | 원인 | 해결법 |
|---|---|---|
ACME challenge failed |
포트 80 차단 | UFW에서 80 포트 허용 확인 |
Certificate has expired |
자동 갱신 실패 | certbot renew 수동 실행 |
SSL_ERROR_RX_RECORD_TOO_LONG |
HTTP 포트에 HTTPS 연결 | Nginx 포트 설정 확인 |
마치며
일본 서버에 SSL을 설정하면 보안과 SEO 두 가지를 동시에 챙길 수 있습니다. SSL 설정 과정에서 어려움이 있으시면 TCP-80.NET 텔레그램 @tcp80net으로 문의해 주세요.