망분리가 되어서 완전히 인터넷이 되지 않는 환경에서 Internet Explorer 11 (Windows 7)로 HTTPS 사이트에 접속을 하면 약 30초 정도가 걸리는 문제를 겪었다. 한 번 접속하고 나면 이후의 네비게이션에서는 문제가 없었지만, 새탭을 띄우면 동일한 주소라고 해도 역시 최초에는 30초 정도의 시간이 소요되었다. 새 탭을 띄우면 새로운 연결(혹은 새로운 탭 프로세스)를 만들기 때문인 것으로 추정된다.

완전한 폐쇄망에서 SSL 사이트를 다루는 일은 처음이라, 이런 문제가 발생할 수 있다는 생각은 전혀 해본 적이 없었다.

행정전자서명(GPKI)를 사용한 것이 원인인가 하고 생각하기도 했었지만, 지금에 와서 보면 다른 인증 기관의 인증서를 사용한다고 해도 동일한 문제가 발생할 것으로 생각된다.

당시에는 문제를 빨리 해결(혹은 문제를 피할 수 있는 방안을 고객에게 안내)하는 것에 초점을 두었기 때문에, IE 설정을 변경하는 방법을 안내했었다. IE 의 인터넷 옵션, 고급 탭에서 보안 > 서버의 인증서 해지 확인* 옵션(기본 활성상태, 리부팅 필요)을 끄는 것으로 문제 현상을 해결할 수 있었다.

문제 현상을 이렇게 해결했다는 글을 써두려고 “서버의 인증서 해지 확인"을 키워드로 구글링해보았다. 여러 서비스 제공 업체에서 여러가지 사유로 이 옵션을 끄라고 안내하는 글이 많았다. 하지만 그 옵션을 꺼도 별 탈이 없는지, 관련된 기반 기술적 내용은 어떤게 있는지 설명하는 글은 찾지 못했다.

영어로 검색해보면 어떨까 싶어서, 영어판 IE에서는 동일한 옵션이 “Check for server certificate revocation"이라고 사용되는 것을 확인하고, 그걸로 구글링 해보니 어렵긴 하지만 궁금증 해결에 도움되는 정보를 얻을 수 있었다. (역시 검색 결과의 품질은 키워드에 달려있나…)

IEInternals - Understanding Certificate Revocation Checks

이 포스트는 2011년 4월에 MSDN 블로그에 포스트된 글이다. 시기 상으로 보면 IE8 이나 IE9 에 해당하는 내용인 것 같은데, IE11 까지도 동일하게 적용되는 내용이라고 보인다. CRL 혹은 OCSP 개념을 간단히 얘기해주고, CRL 혹은 OCSP 체크에 실패한 경우에도 사용자에게 알려주지 않도록 한 이유를 설명하는 부분도 있다.

원래는 노란 경고 메시지를 표시하도록 개발했었지만 테스트를 해보니 CLR, OCSP 체크 실패가 너무 자주 발생했기 때문에 그렇게 했다고 한다. 실패 경고를 표시하도록 설정할 수 있으므로 그 방법도 알려주고 있다.

SSL 인증서의 CRL 이란?

CRL은 어떤 것인지, 또 CRL 배포 지점 정보는 인증서 자체에 포함되어 있다는 점을 알려주는 간단한 내용이다.

Microsoft Docs - Windows Server 2008 / How Certificate Revocation Works

가장 첫 번째로 이야기한 IE Internals 블로그 포스트에 링크된 글인데, 윈도우에서 CRL과 OCSP 확인이 어떻게 이뤄지는지 상세하게 설명하고 있다. 그 과정에는 CryptoAPI 라는 녀석이 사용되는데 요청의 타임아웃이 어떤 식으로 동작하는지도 설명이 되어 있다.

종합해보면, HTTPS 요청의 경우에는 CRL이나 OCSP를 사용하여 서버 인증서의 만료 여부를 체크하도록 되어 있는데 이는 인터넷 연결이 되어 있어야만 가능한 일이다. 폐쇄망에서는 당연히 불가능한 일이겠다. 접속 지연이 발생하는 이유는 CRL 요청의 결과를 기다리는 시간이 있기 때문이다.