콘텐츠로 건너뛰기

📜 SSL 검사

호스트명으로 SSL/TLS 인증서를 가져와 발급자, 유효기간, SAN, 전체 인증서 체인을 검사.

완전 무료 가입 불필요 서버 처리 로그 · DB 없음 레이트 리밋 5 개 언어 다크 모드

⚠️ 요청은 DevLab 서버에서 이루어집니다. 사설 IP 주소와 localhost는 허용되지 않습니다.

📖 이 진단으로 알 수 있는 것

브라우저의 자물쇠 표시는 "인증서가 유효" "발급자를 신뢰" "도메인 이름이 일치" 세 가지가 동시에 성립할 때만 켜집니다. 이 진단은 실제로 TLS 핸드셰이크를 수행해 돌아온 인증서의 유효기간·발급자·대상 도메인·체인 구성을 확인합니다. 로컬 브라우저에서 보인다고 해도 인증서 체인이 불완전하면 일부 환경에서만 실패합니다 — 구형 Android, curl, 서버 간 통신에서 끊기는 것이 이 패턴입니다.

판정 항목 무엇을 보는가 걸렸을 때의 대처
유효기간 남은 일수입니다. Let's Encrypt는 90일이므로 자동 갱신이 멈췄다면 60일쯤에 경고 구간에 들어갑니다. certbot이라면 certbot renew --dry-run으로 갱신 경로가 살아 있는지 확인합니다. 실패의 대부분은 80번 포트가 막혀 HTTP-01이 통과하지 못하거나, 갱신 후 nginx를 리로드하지 않은 경우입니다.
인증서 체인 서버 인증서에서 신뢰된 루트까지의 경로입니다. 중간 인증서를 배포하지 않으면, 그것을 갖고 있지 않은 클라이언트만 검증에 실패합니다. nginx는 ssl_certificate서버 인증서와 중간 인증서를 이어 붙인 파일(certbot이면 fullchain.pem)을 지정합니다. cert.pem을 가리키는 것이 이 문제의 전형적인 원인입니다.
도메인 이름 일치 (SAN) 인증서가 대상으로 하는 호스트명 목록입니다. 현재는 CN이 아니라 SAN을 봅니다. example.comwww.example.com은 다른 이름이므로 둘 다 들어 있어야 합니다. certbot이라면 -d example.com -d www.example.com처럼 필요한 호스트를 모두 나열해 다시 발급합니다. 와일드카드 인증서는 DNS-01 챌린지가 필요하며, *.example.comexample.com 자신을 포함하지 않는 점에 주의하세요.
TLS 버전 TLS 1.0 / 1.1은 폐기되었고 PCI DSS에서도 금지됩니다. 1.2가 최소선, 1.3이 현행입니다. nginx라면 ssl_protocols TLSv1.2 TLSv1.3;로 좁힙니다. 구형 단말을 잘라내는 판단이므로 액세스 로그의 User-Agent를 확인한 뒤 결정하세요.

브라우저는 한 번 받은 중간 인증서를 캐시하므로, 체인이 불완전해도 내 PC에서는 재현되지 않을 수 있습니다. openssl s_client -connect example.com:443 -servername example.com의 출력에 중간 인증서가 포함되어 있는지 보는 것이 확실합니다.

🔗 관련 도구