티스토리 뷰

카테고리 없음

TLS 인증서 교체 시 일부 브라우저에서만 경고가 뜨는 문제

생각방 2026. 11. 9. 11:37

목차


    인증서가 만료되어 교체 후 동일하게 접속했는데, 한 브라우저는 홈페이지를 띄우고 다른 브라우저는 연결 경고를 띄우는 케이스가 간혹 있습니다. 이럴 때는 정상 화면을 다시 열어 보는 것보다 두 브라우저가 받은 서버 인증서를 비교하는 편이 빠릅니다. 어느 접속 지점에 교체가 덜 됐는지, 단말마다 인증서를 검증하는 조건이 다른지 살펴볼 단서가 됩니다.


    인증서 교체 시 에러메세지

    브라우저가 받은 인증서부터 비교

    경고가 뜬 환경에서 주소창의 호스트명, 오류 코드, 브라우저와 운영체제 버전, 접속망을 기록합니다. 인증서 상세를 열 수 있다면 정상 환경과 경고 환경의 서버 인증서 SHA-256 핑거프린트도 비교해봅니다. 핑거프린터가 다르면 양쪽이 서로 다른 인증서를 받은 것입니다.


    CDN이나 로드밸런서가 브라우저와의 TLS 연결을 직접 맺는 구성이라면, 브라우저가 보는 인증서는 그 접속 지점에서 제시합니다. 원본 웹서버의 파일을 교체했더라도 브라우저에 교체 전 인증서가 보인다면, 사용자 요청이 도달한 접속 지점부터 확인합니다. 양쪽에서 새 인증서의 지문이 같다면, 각 접속 지점이 함께 보낸 중간 인증서를 비교할 차례입니다.

    OpenSSL로 서버가 보낸 체인 확인

    아래 예시의 portal.example을 실제 호스트명으로 바꿉니다. -servername은 연결을 시작할 때 대상 호스트명을 서버에 전달하는 SNI 옵션입니다. 여러 접속 지점을 비교할 때는 -connect에 해당 지점의 IP와 포트를 넣고, -servername에는 같은 호스트명을 유지합니다. OpenSSL — s_client 옵션

    openssl s_client -connect portal.example:443 \
      -servername portal.example -showcerts < /dev/null

    -showcerts는 서버가 그 연결에서 보낸 인증서를 전송 순서대로 보여 줍니다. 브라우저의 인증서 상세 화면에는 브라우저가 자체적으로 구성한 검증 경로가 표시될 수 있습니다. 서버가 실제로 어떤 인증서를 제공했는지 확인할 때는 OpenSSL 출력의 Certificate chain 목록을 봅니다. OpenSSL — s_client 옵션


    목록에 새 서버 인증서만 보이면 발급기관이 제공한 체인과 대조합니다. 중간 인증서는 서버 인증서에서 클라이언트가 신뢰하는 루트까지 이어 주는 역할을 합니다. 클라이언트가 이미 신뢰하는 루트는 서버가 전송하는 목록에서 생략할 수 있습니다. RFC 8446 — TLS 1.3 인증서 메시지

    요약 Certificate chain은 서버의 전송 내용을 보여 줍니다. Verify return code는 명령을 실행한 환경의 검증 결과이므로, 브라우저에서 경고가 사라졌는지는 해당 단말에서 다시 확인합니다. OpenSSL — s_client 옵션

    두 인증서 대조

    같은 체인에서 경고가 갈리는 이유

    같은 서버 인증서를 받아도 단말이 갖고 있는 중간 인증서나 신뢰하는 루트는 다를 수 있습니다. 예를 들어 Firefox는 일부 중간 인증서를 미리 받아 로컬 캐시에 저장합니다. 빠진 중간 인증서가 캐시에 있는 환경에서는 신뢰 경로를 완성할 수 있습니다. 어느 루트를 신뢰하는지는 브라우저와 단말의 신뢰 설정에 따라 달라집니다. Mozilla — 중간 인증서 사전 로드 Chromium — Chrome Root Store

    오류가 호스트명 불일치나 유효기간 문제를 가리키면 그 항목부터 확인합니다. 발급자를 신뢰할 수 없다는 오류라면 서버가 보낸 인증서와 클라이언트의 신뢰 설정을 아래처럼 나눠 살펴봅니다.

    관찰 결과다음 점검
    같은 호스트에서 교체 전 인증서가 일부 접속 지점에 남음사용자와 TLS 연결을 맺는 지점별 배포 상태 확인
    새 서버 인증서는 같고 일부 접속 지점에서 필요한 중간 인증서가 빠짐해당 지점에 적용한 발급기관의 체인 파일 확인
    서버 인증서와 전송 목록이 같은데 특정 환경에서 발급자를 신뢰하지 않음경고가 발생한 환경의 신뢰 저장소와 연결 가능한 루트 확인

    Nginx가 브라우저와 직접 TLS 연결을 맺는 구성에서 중간 인증서 누락이 확인됐다면, ssl_certificate가 가리키는 PEM 파일에 서버 인증서를 먼저 두고 발급기관이 제공한 중간 인증서를 뒤에 붙입니다. 설정을 검사하고 반영한 뒤, 같은 호스트와 접속 지점에서 -showcerts를 다시 실행해 전송 목록을 확인합니다. NGINX — 인증서 체인 구성

    동일 인증서 대상 인증기관에 따른 유무효

    결론

    교체를 마친 뒤에는 사용자 접속 지점이 새 서버 인증서와 필요한 중간 인증서를 보내는지, 처음에 경고가 떴던 환경에서도 새 연결이 열리는지 확인합니다. 확인 기록에는 호스트명, 접속 지점, 서버 인증서 지문, 전송된 중간 인증서, 브라우저 재시험 결과를 함께 남겨 두면 다음 교체 때 비교하기 쉽습니다.

    참고자료