Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 18.9. CRL(Certificate Revocation List) 관리 [링크 복사], [링크+제목 복사],
조회: 32074
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
부모글 보이기/감추기
(연관된 글이 7개 있습니다.)

6. CRL(Certificate Revocation List) 관리


사실, 이 부분은 예전에는 그다지 중요한 사항이 아니었습니다. 하지만 IE7 과 IIS 7의 강화된 보안 설정으로 인해 이젠 CRL에 대한 접근 설정이 필수가 되었습니다.

그렇다면, CRL이 뭘까요? 이름에서 알 수 있듯이, 여러 가지 사유로 인해 이미 발행된 인증서에 대해서 "폐기"를 한 목록입니다. 실제로, Windows 2003의 "인증 기관" MMC 관리자에서는 다음과 같이 "발급된 인증서"에 대해서 해지를 할 수 있습니다.

[그림: MMC 관리자에서 인증서 해지 선택]
cert_validate_3.png

[그림: 인증서 해지 사유 선택]
cert_validate_4.png

어떤 사유에 의해서든지, 일단 위와 같은 작업을 통해 인증서가 해지되면, 해당 인증서는 "해지된 인증서" 목록으로 옮겨지게 됩니다.

[그림: 해지된 인증서 보기]
cert_validate_5.png

위의 화면에서 해지된 인증서를 다시 "발급된 인증서" 쪽으로 옮길 수 있는데, 이때 해지 이유가 "인증서 대기"일 때만 가능할 뿐, 다른 사유로 인해 해지된 경우에는 다시 복원할 수 없습니다.




일단, 위와 같은 식으로 간단하게 CRL 관리를 할 수 있는데요. 문제는 이렇게 해지된 인증서에 대해서 클라이언트 측에서 어떻게 알 수 있느냐입니다.

이 부분은 사실 좀 원시적이라는 느낌이 들긴 하는데요. 대강의 시나리오는 이렇습니다. 서버는 해지된 인증서 목록을 주기적으로 CRL 확장자로 된 파일로 구성해서 공유될 수 있는 폴더에 올려 놓습니다. "인증 기관" MMC 콘솔에서는 아래와 같은 동작을 통해서 해지된 인증서를 "게시"할 수 있습니다. (또한, 주기적으로 저장되도록 설정이 되어 있기도 합니다.)

cert_validate_6.png

이후에는 클라이언트들이 필요할 때마다 서버로부터 해당 CRL 파일을 다운로드해 자신이 검증해야 할 인증서가 해지 목록에 있는지를 살펴보게 됩니다.

일례로, 웹 브라우저가 "https://www.sysnet.pe.kr"을 방문한 경우, 해당 웹 사이트에 사용된 SSL 인증서에 대해서 기본적으로 날짜 제한에 걸렸는지, 도메인 명과 일치하는지 등의 검사를 한 다음, 필요하다면 해당 인증서가 해지되었는지를 알기 위해 지정된 URI로부터 CRL 파일을 다운로드 받아서 인증서 해지 여부를 알아내게 되는 것입니다.

그렇다면, 웹 브라우저는 CRL 목록이 어디 있는지를 어떻게 알 수 있을까요? 간단합니다. 바로 인증서에 들어 있습니다. 아래의 화면은 제 웹 사이트에 사용된 SSL 인증서의 CRL 배포 설정을 보여주고 있습니다.

cert_serv_revoke_settings_3.png

보시는 바와 같이, CRL을 배포할 수 있는 지점은 여러 개가 될 수 있습니다. 그래도 가장 일반적으로 사용할 수 있는 것이 HTTP 배포일 텐데요. 실제로, 여러분들의 웹 브라우저에서 "http://w32.sysnet.pe.kr/CertEnroll/w32.sysnet.pe.kr(3).crl"이라고 입력하게 되면 제 웹 서버에서 배포하는 CRL 목록 파일을 받아볼 수 있습니다.




이제 문제는, 인증서에 포함될 "CRL Distribution Point"를 지정해 주는 방법이 남았군요.

역시 "인증 기관" MMC 관리자에서 해당 서버 노드 (아래에서는 "w32.sysnet.pe.kr")를 마우스 오른쪽 버튼으로 누르면 나오는 메뉴의 "등록 정보" 창을 선택하면 다음과 같은 "Extensions" 탭 내용의 CDP(CRL Distribution Point)를 설정할 수 있는 화면이 나옵니다.

cert_validate_7.png

보시는 것처럼 "Add" 버튼을 통한 추가도 가능하지만, 이미 기존 항목 중에는 "http://<ServerDNSName>/CertEnroll/<CaName><CRLNameSuffix><DeltaCRLAllowed>.crl"과 같이 http 프로토콜까지 등록이 되어 있기 때문에 그것을 편집해 주는 것이 좋겠습니다.

이 중에서, 저 같은 경우에는 "ServerDNSName" 값이 "longhorn5600.themost.pe.kr"로 들어가 있습니다. 왜냐하면 themost라는 테스트 AD 서버에 "longhorn5600"이라는 컴퓨터를 등록시켜 놨기 때문입니다. 그렇다면, 이것을 현실적으로 사용할 수 있는 "www.sysnet.pe.kr"로 설정해야 할 텐데요. 제가 방법을 모르는 것인지는 모르겠지만, 공식적인 "관리 도구"를 통한 방법은 제공되지 않으며, 레지스트리에서 해당 값들을 직접 수정해 주어야 합니다. 그것도 "ServerDNSName"만을 수정해 주는 레지스트리는 없고, 다음 화면과 같이 "HKLM\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration\w32.sysnet.pe.kr" 노드의 "CRLPublicationURLs" 값에서 http로 시작하는 부분을 자신이 원하는 DNS 명으로 바꿔 준 후, "인증서 서비스"를 재시작해 주는 방법만 가능합니다.

cert_validate_8.png

즉, 저 같은 경우에는 다음과 같이 http 부분의 %1 값을 "www.sysnet.pe.kr"로 교체를 했습니다.

65:C:\Windows\system32\CertSrv\CertEnroll\%3%8%9.crl
79:ldap:///CN=%7%8,CN=%2,CN=CDP,CN=Public Key Services,CN=Services,%6%10
6:http://www.sysnet.pe.kr/CertEnroll/%3%8%9.crl
0:file://\\%1\CertEnroll\%3%8%9.crl

이제, 정상적으로 CRL 배포 지점이 인증서에 반영이 되는지 확인하기 위해 "18.4. 사용자 인증서 발급"에서 설명한 데로, 새로운 인증서를 발급받아 봅니다.

보시는 것처럼, 이제 발급되는 모든 인증서의 CDP 값은 "https://www.sysnet.pe.kr/CertEnroll/w32.sysnet.pe.kr.crl"을 가리키게 됩니다.

cert_validate_9.png

/CertEnroll 가상 디렉토리는 인증서를 설치할 때 같이 IIS에 등록되어집니다. 만약, 그 경로를 바꿔 주면 역시 위의 "CRLPublicationURLs" 레지스트리 값도 함께 바꿔 주시면 됩니다.

혹시... 더 궁금한 거 있으신가요? ^^



[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 6/24/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 31  [32]  33  34  35  36  37  38  39  40  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
13139정성태10/9/202213670.NET Framework: 2057. 리눅스 환경의 .NET Core 3/5+ 메모리 덤프로부터 모든 닷넷 모듈을 추출하는 방법파일 다운로드1
13138정성태10/8/202216265.NET Framework: 2056. C# - await 비동기 호출을 기대한 메서드가 동기로 호출되었을 때의 부작용 [1]
13137정성태10/8/202214216.NET Framework: 2055. 리눅스 환경의 .NET Core 3/5+ 메모리 덤프로부터 닷넷 모듈을 추출하는 방법
13136정성태10/7/202214545.NET Framework: 2054. .NET Core/5+ SDK 설치 없이 dotnet-dump 사용하는 방법
13135정성태10/5/202215065.NET Framework: 2053. 리눅스 환경의 .NET Core 3/5+ 메모리 덤프를 분석하는 방법 - 두 번째 이야기 [1]
13134정성태10/4/202212260오류 유형: 820. There is a problem with AMD Radeon RX 5600 XT device. For more information, search for 'graphics device driver error code 31'
13133정성태10/4/202213394Windows: 211. Windows - (commit이 아닌) reserved 메모리 사용량 확인 방법 [1]
13132정성태10/3/202213429스크립트: 42. 파이썬 - latexify-py 패키지 소개 - 함수를 mathjax 식으로 표현
13131정성태10/3/202217238.NET Framework: 2052. C# - Windows Forms의 데이터 바인딩 지원(DataBinding, DataSource) [2]파일 다운로드1
13130정성태9/28/202213049.NET Framework: 2051. .NET Core/5+ - 에러 로깅을 위한 Middleware가 동작하지 않는 경우파일 다운로드1
13129정성태9/27/202213674.NET Framework: 2050. .NET Core를 IIS에서 호스팅하는 경우 .NET Framework CLR이 함께 로드되는 환경
13128정성태9/23/202216602C/C++: 158. Visual C++ - IDL 구문 중 "unsigned long"을 인식하지 못하는 #import [1]파일 다운로드1
13127정성태9/22/202214860Windows: 210. WSL에 systemd 도입
13126정성태9/15/202215385.NET Framework: 2049. C# 11 - 정적 메서드에 대한 delegate 처리 시 cache 적용
13125정성태9/14/202215794.NET Framework: 2048. C# 11 - 구조체 필드의 자동 초기화(auto-default structs)
13124정성태9/13/202215586.NET Framework: 2047. Golang, Python, C#에서의 CRC32 사용
13123정성태9/8/202215635.NET Framework: 2046. C# 11 - 멤버(속성/필드)에 지정할 수 있는 required 예약어 추가
13122정성태8/26/202216043.NET Framework: 2045. C# 11 - 메서드 매개 변수에 대한 nameof 지원
13121정성태8/23/202212460C/C++: 157. Golang - 구조체의 slice 필드를 Reflection을 이용해 변경하는 방법
13120정성태8/19/202216066Windows: 209. Windows NT Service에서 UI를 다루는 방법 [3]
13119정성태8/18/202215176.NET Framework: 2044. .NET Core/5+ 프로젝트에서 참조 DLL이 보관된 공통 디렉터리를 지정하는 방법
13118정성태8/18/202212712.NET Framework: 2043. WPF Color의 기본 색 영역은 (sRGB가 아닌) scRGB [2]
13117정성태8/17/202216394.NET Framework: 2042. C# 11 - 파일 범위 내에서 유효한 타입 정의 (File-local types)파일 다운로드1
13116정성태8/4/202216847.NET Framework: 2041. C# - Socket.Close 시 Socket.Receive 메서드에서 예외가 발생하는 문제파일 다운로드1
13115정성태8/3/202217439.NET Framework: 2040. C# - ValueTask와 Task의 성능 비교 [1]파일 다운로드1
13114정성태8/2/202217298.NET Framework: 2039. C# - Task와 비교해 본 ValueTask 사용법파일 다운로드1
... 31  [32]  33  34  35  36  37  38  39  40  41  42  43  44  45  ...