SSL 인증서 오류 해결, 날짜·도메인·체인 점검
- 인증서 오류는 크게 만료, 도메인 불일치, 신뢰할 수 없는 발급자나 체인 누락 세 갈래로 나뉩니다.
- 서버가 중간 인증서까지 함께 보내지 않으면 일부 기기에서만 오류가 나는 증상이 생길 수 있습니다.
- 방문자 기기의 시계나 오래된 신뢰 저장소가 원인일 수도 있어 서버 문제와 구분해서 확인해야 합니다.
브라우저에 “연결이 비공개로 설정되어 있지 않습니다” 같은 경고가 뜨면 방문자 대부분은 사이트를 떠납니다. 이 경고의 뒤에는 인증서 문제가 있고, 오류 코드를 읽으면 원인이 어느 쪽인지 대략 알 수 있습니다.
MDN은 서버 인증서가 사이트의 키를 도메인 이름에 묶어 주는 역할을 한다고 설명합니다. 브라우저는 일반적으로 인증서가 요청한 주소를 포함하는지, 현재 날짜가 유효 기간 안인지, 신뢰하는 발급 기관까지 이어지는지를 확인하며, 하나라도 어긋나면 경고를 띄웁니다. 이 글은 이 세 가지를 기준으로 원인을 나누어 점검하는 순서를 안내합니다. 오류 코드의 정확한 표기는 브라우저 버전에 따라 다를 수 있습니다.
오류 코드로 원인 좁히기
| 오류 코드 예시 | 의미 | 먼저 볼 곳 |
|---|---|---|
| NET::ERR_CERT_DATE_INVALID | 인증서가 만료됐거나 아직 유효하지 않음 | 만료일, 방문자 기기 시계 |
| NET::ERR_CERT_COMMON_NAME_INVALID | 인증서에 적힌 도메인과 접속 주소 불일치 | 인증서의 도메인 목록, www 여부 |
| NET::ERR_CERT_AUTHORITY_INVALID | 발급자를 신뢰할 수 없음 | 중간 인증서, 자체 서명 여부 |
코드 이름이 다르더라도 대부분 위 세 가지 범주 안에 들어갑니다.
날짜 오류, 만료와 시계 문제
가장 흔한 경우입니다. 먼저 서버의 인증서 만료일을 확인합니다.
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates
notAfter 날짜가 지났다면 SSL 인증서 갱신 방법에 따라 갱신하고 웹 서버를 reload합니다. 날짜가 충분히 남아 있는데도 오류가 난다면 방문자 기기의 시계를 의심할 수 있습니다. 컴퓨터나 휴대폰의 날짜가 과거나 미래로 틀어져 있으면 정상 인증서도 아직 유효하지 않거나 이미 만료된 것으로 판단됩니다. 서로 다른 기기와 네트워크에서 테스트해 보면 서버 문제인지 구분됩니다.
발급자, 만료일, 호스트명 일치, 신뢰 체인을 바로 확인할 수 있습니다.
SSL 인증서 검사하기도메인 불일치 오류
인증서는 발급받을 때 적은 이름에만 유효합니다. 흔한 원인은 다음과 같습니다.
- 인증서가
example.com만 포함하고www.example.com은 빠졌다. - 서브도메인에 와일드카드가 아닌 일반 인증서를 그대로 썼다.
- 한 서버에 여러 사이트가 있는데 가상 호스트 설정이 달라 다른 사이트 인증서가 응답한다.
- 도메인을 옮겼는데 서버에 예전 인증서가 남아 있다.
인증서에 들어 있는 이름은 다음 명령으로 확인합니다.
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -subject -ext subjectAltName
출력된 이름 목록에 접속한 주소가 있어야 합니다. 와일드카드(*.example.com)는 한 단계 하위 이름만 덮으며 최상위 example.com 자체는 따로 포함해야 하는 경우가 많습니다. Let’s Encrypt 문서에 따르면 와일드카드 인증서는 DNS-01 검증으로만 발급됩니다.
발급자 신뢰 오류와 체인 누락
서버 인증서는 보통 중간 인증서를 거쳐 루트 인증서로 이어집니다. 브라우저가 이 연결을 끝까지 따라가지 못하면 AUTHORITY_INVALID 계열의 오류가 납니다. 대표적인 원인은 두 가지입니다.
- 서버가 서버 인증서만 보내고 중간 인증서를 빠뜨렸다.
- 인증서가 자체 서명이거나 신뢰 목록에 없는 발급 기관의 것이다.
체인 누락은 데스크톱 브라우저에서는 괜찮고 일부 모바일이나 API 클라이언트에서만 실패하는 식으로 나타나서 찾기 어렵습니다. Let’s Encrypt 문서도 현대 플랫폼에서 흔한 실패 원인으로 올바른 체인을 보내지 않는 서버를 꼽습니다. Apache는 SSLCertificateFile 파일에 서버 인증서에 이어 중간 인증서를 서버 인증서부터 루트 방향 순서로 이어 넣을 수 있고(2.4.8 이상), nginx는 같은 파일 안에 서버 인증서를 먼저, 중간 인증서를 그다음에 두라고 설명합니다. certbot을 쓴다면 설정에 fullchain.pem을 지정합니다.
echo | openssl s_client -connect example.com:443 -servername example.com -showcerts 2>/dev/null | grep -E "s:|i:"
위 명령은 서버가 보내는 인증서 목록의 주체(s)와 발급자(i)를 보여 줍니다. 서버 인증서 외에 중간 인증서가 한 줄 이상 있어야 정상입니다.
기기와 환경 때문에 생기는 오류
서버 쪽을 모두 확인했는데도 일부 방문자에게만 오류가 난다면 환경 문제일 수 있습니다.
- 오래된 운영체제나 기기는 최신 루트 인증서를 신뢰 목록에 갖고 있지 않습니다. Let’s Encrypt는 호환성 문서에서 플랫폼별 신뢰 시작 버전을 정리해 두었습니다.
- 회사나 학교 네트워크, 보안 프로그램이 HTTPS 연결을 가로채 자체 인증서를 끼워 넣는 경우가 있습니다.
- 브라우저 캐시나 확장 프로그램이 원인인 경우는 시크릿 창으로 접속해 보면 알 수 있습니다.
점검 순서 요약
- 다른 기기와 네트워크에서도 같은 오류가 나는지 확인한다.
- openssl로 만료일과 도메인 이름을 확인한다.
- 서버가 중간 인증서까지 보내는지 확인한다.
- 웹 서버 설정이 올바른 파일(fullchain)을 가리키는지 확인하고 설정 검사 후 reload한다.
- 그래도 안 되면 HTTPS 전반의 연결 문제를 다루는 HTTPS 연결 오류 해결 글로 넘어간다.
외부 공개 검사는 서버가 보내는 인증서만 볼 수 있으므로, 서버 내부의 파일 위치나 설정 오류는 서버에서 직접 확인해야 합니다.
SSL 인증서 검사발급자·유효기간·호스트명 일치·신뢰 체인을 무료로 확인할 수 있습니다.
SSL 인증서 검사하기자주 묻는 질문
ERR_CERT_DATE_INVALID가 뜨면 항상 인증서가 만료된 건가요?
서버 인증서가 만료된 경우가 많지만, 방문자 기기의 날짜와 시간이 틀려도 같은 오류가 납니다. 다른 기기나 다른 네트워크에서도 같은 오류가 나는지 먼저 확인하세요.
www를 빼고 접속하면 도메인 오류가 나요.
인증서가 www가 있는 이름이나 없는 이름 중 하나만 포함하고 있을 수 있습니다. 인증서의 대체 이름(SAN) 목록에 두 주소가 모두 있는지 확인하고, 없으면 두 이름을 포함해 다시 발급하세요.
PC에서는 괜찮은데 오래된 휴대폰에서만 오류가 나요.
서버가 중간 인증서를 보내지 않거나, 기기의 신뢰할 수 있는 루트 목록이 오래된 경우일 수 있습니다. Let's Encrypt 문서는 현대 플랫폼에서 흔한 실패 원인으로 올바른 체인을 보내지 않는 서버를 꼽습니다.
자체 서명 인증서를 운영 사이트에 써도 되나요?
자체 서명 인증서는 브라우저가 신뢰하는 발급 기관을 거치지 않아 방문자에게 경고가 표시됩니다. 외부에 공개하는 사이트에는 신뢰받는 기관의 인증서를 쓰는 것이 기본입니다.
확인한 자료
- Let's Encrypt 문서 - 인증서 호환성
- MDN - Transport Layer Security
- nginx 문서 - ngx_http_ssl_module
- Apache 문서 - mod_ssl
기술 정보는 2026-10-24에 위 자료로 확인했습니다. 소프트웨어 버전·기본값·서비스 정책은 바뀔 수 있으므로 적용 전 각 문서의 최신 내용을 확인하세요. 이 글은 일반 정보이며 특정 서비스 가입을 권하지 않습니다.