Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 18.9. CRL(Certificate Revocation List) 관리 [링크 복사], [링크+제목 복사],
조회: 27255
글쓴 사람
정성태 (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

비밀번호

댓글 작성자
 




... 16  17  18  19  20  21  22  23  24  [25]  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
13022정성태3/31/20226925Windows: 202. 윈도우 11 업그레이드 - "PC Health Check"를 통과했지만 여전히 업그레이드가 안 되는 경우 해결책
13021정성태3/31/20227100Windows: 201. Windows - INF 파일을 이용한 장치 제거 방법
13020정성태3/30/20226869.NET Framework: 1187. RDP 접속 시 WPF UserControl의 Unloaded 이벤트 발생파일 다운로드1
13019정성태3/30/20226836.NET Framework: 1186. Win32 Message를 Code로부터 메시지 이름 자체를 구하고 싶다면?파일 다운로드1
13018정성태3/29/20227349.NET Framework: 1185. C# - Unsafe.AsPointer가 반환한 포인터는 pinning 상태일까요? [5]
13017정성태3/28/20227129.NET Framework: 1184. C# - GC Heap에 위치한 참조 개체의 주소를 알아내는 방법 - 두 번째 이야기 [3]
13016정성태3/27/20228041.NET Framework: 1183. C# 11에 추가된 ref 필드의 (우회) 구현 방법파일 다운로드1
13015정성태3/26/20229329.NET Framework: 1182. C# 11 - ref struct에 ref 필드를 허용 [1]
13014정성태3/23/20227910VC++: 155. CComPtr/CComQIPtr과 Conformance mode 옵션의 충돌 [1]
13013정성태3/22/20226149개발 환경 구성: 641. WSL 우분투 인스턴스에 파이썬 2.7 개발 환경 구성하는 방법
13012정성태3/21/20225484오류 유형: 803. C# - Local '...' or its members cannot have their address taken and be used inside an anonymous method or lambda expression
13011정성태3/21/20227027오류 유형: 802. 윈도우 운영체제에서 웹캠 카메라 인식이 안 되는 경우
13010정성태3/21/20225909오류 유형: 801. Oracle.ManagedDataAccess.Core - GetTypes 호출 시 "Could not load file or assembly 'System.DirectoryServices.Protocols...'" 오류
13009정성태3/20/20227618개발 환경 구성: 640. docker - ibmcom/db2 컨테이너 실행
13008정성태3/19/20226895VS.NET IDE: 176. 비주얼 스튜디오 - 솔루션 탐색기에서 프로젝트를 선택할 때 csproj 파일이 열리지 않도록 만드는 방법
13007정성태3/18/20226476.NET Framework: 1181. C# - Oracle.ManagedDataAccess의 Pool 및 그것의 연결 개체 수를 알아내는 방법파일 다운로드1
13006정성태3/17/20227625.NET Framework: 1180. C# - ffmpeg(FFmpeg.AutoGen)를 이용한 remuxing.c 예제 포팅
13005정성태3/17/20226396오류 유형: 800. C# - System.InvalidOperationException: Late bound operations cannot be performed on fields with types for which Type.ContainsGenericParameters is true.
13004정성태3/16/20226395디버깅 기술: 182. windbg - 닷넷 메모리 덤프에서 AppDomain에 걸친 정적(static) 필드 값을 조사하는 방법
13003정성태3/15/20226531.NET Framework: 1179. C# - (.NET Framework를 위한) Oracle.ManagedDataAccess 패키지의 성능 카운터 설정 방법
13002정성태3/14/20227381.NET Framework: 1178. C# - ffmpeg(FFmpeg.AutoGen)를 이용한 http_multiclient.c 예제 포팅
13001정성태3/13/20227739.NET Framework: 1177. C# - 닷넷에서 허용하는 메서드의 매개변수와 호출 인자의 최대 수
13000정성태3/12/20227350.NET Framework: 1176. C# - Oracle.ManagedDataAccess.Core의 성능 카운터 설정 방법
12999정성태3/10/20226873.NET Framework: 1175. Visual Studio - 프로젝트 또는 솔루션의 Clean 작업 시 응용 프로그램에서 생성한 파일을 함께 삭제파일 다운로드1
12998정성태3/10/20226350.NET Framework: 1174. C# - ELEMENT_TYPE_FNPTR 유형의 사용 예
12997정성태3/10/202210918오류 유형: 799. Oracle.ManagedDataAccess - "ORA-01882: timezone region not found" 오류가 발생하는 이유
... 16  17  18  19  20  21  22  23  24  [25]  26  27  28  29  30  ...