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

비밀번호

댓글 작성자
 




1  2  [3]  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13568정성태2/27/20241913닷넷: 2220. C# - .NET Framework 프로세스의 LoaderOptimization 설정을 확인하는 방법파일 다운로드1
13567정성태2/27/20241859오류 유형: 898. .NET Framework 3.5 이하에서 mscoree.tlb 참조 시 System.BadImageFormatException파일 다운로드1
13566정성태2/27/20241934오류 유형: 897. Windows 7 SDK 설치 시 ".NET Development" 옵션이 비활성으로 선택이 안 되는 경우
13565정성태2/23/20241807닷넷: 2219. .NET CLR2 보안 모델에서의 개별 System.Security.Permissions 제어
13564정성태2/22/20241984Windows: 259. Hyper-V Generation 1 유형의 VM을 Generation 2 유형으로 바꾸는 방법
13563정성태2/21/20241962디버깅 기술: 196. windbg - async/await 비동기인 경우 메모리 덤프 분석의 어려움
13562정성태2/21/20242014오류 유형: 896. ASP.NET - .NET Framework 기본 예제에서 System.Web에 대한 System.IO.FileNotFoundException 예외 발생
13561정성태2/20/20242087닷넷: 2218. C# - (예를 들어, Socket) 비동기 I/O에 대한 await 호출 시 CancellationToken을 이용한 취소파일 다운로드1
13560정성태2/19/20242132디버깅 기술: 195. windbg 분석 사례 - Semaphore 잠금으로 인한 Hang 현상 (닷넷)
13559정성태2/19/20242956오류 유형: 895. ASP.NET - System.Security.SecurityException: 'Requested registry access is not allowed.'
13558정성태2/18/20242210닷넷: 2217. C# - 최댓값이 1인 SemaphoreSlim 보다 Mutex 또는 lock(obj)를 선택하는 것이 나은 이유
13557정성태2/18/20241946Windows: 258. Task Scheduler의 Author 속성 값을 변경하는 방법
13556정성태2/17/20242006Windows: 257. Windows - Symbolic (hard/soft) Link 및 Junction 차이점
13555정성태2/15/20242153닷넷: 2216. C# - SemaphoreSlim 사용 시 주의점
13554정성태2/15/20241876VS.NET IDE: 189. Visual Studio - 닷넷 소스코드 디컴파일 찾기가 안 될 때
13553정성태2/14/20241971닷넷: 2215. windbg - thin/fat lock 없이 동작하는 Monitor.Wait + Pulse
13552정성태2/13/20241918닷넷: 2214. windbg - Monitor.Enter의 thin lock과 fat lock
13551정성태2/12/20242108닷넷: 2213. ASP.NET/Core 웹 응용 프로그램 - 2차 스레드의 예외로 인한 비정상 종료
13550정성태2/11/20242271Windows: 256. C# - Server socket이 닫히면 Accept 시켰던 자식 소켓이 닫힐까요?
13549정성태2/3/20242736개발 환경 구성: 706. C# - 컨테이너에서 실행하기 위한 (소켓) 콘솔 프로젝트 구성
13548정성태2/1/20242535개발 환경 구성: 705. "Docker Desktop for Windows" - ASP.NET Core 응용 프로그램의 소켓 주소 바인딩(IPv4/IPv6 loopback, Any)
13547정성태1/31/20242320개발 환경 구성: 704. Visual Studio - .NET 8 프로젝트부터 dockerfile에 추가된 "USER app" 설정
13546정성태1/30/20242161Windows: 255. (디버거의 영향 등으로) 대상 프로세스가 멈추면 Socket KeepAlive로 연결이 끊길까요?
13545정성태1/30/20242010닷넷: 2212. ASP.NET Core - 우선순위에 따른 HTTP/HTTPS 호스트:포트 바인딩 방법
13544정성태1/30/20242035오류 유형: 894. Microsoft.Data.SqlClient - Could not load file or assembly 'System.Security.Permissions, ...'
13543정성태1/30/20242067Windows: 254. Windows - 기본 사용 중인 5357 포트 비활성화는 방법
1  2  [3]  4  5  6  7  8  9  10  11  12  13  14  15  ...