Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 18.9. CRL(Certificate Revocation List) 관리 [링크 복사], [링크+제목 복사],
조회: 27221
글쓴 사람
정성태 (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)
13289정성태3/18/20233684Windows: 231. Win32 - 대화창 템플릿의 2진 리소스를 읽어들여 자식 윈도우를 생성하는 방법파일 다운로드1
13288정성태3/17/20233804Windows: 230. Win32 - 대화창의 DLU 단위를 pixel로 변경하는 방법파일 다운로드1
13287정성태3/16/20233982Windows: 229. Win32 - 대화창 템플릿의 2진 리소스를 읽어들여 윈도우를 직접 띄우는 방법파일 다운로드1
13286정성태3/15/20234413Windows: 228. Win32 - 리소스에 포함된 대화창 Template의 2진 코드 해석 방법
13285정성태3/14/20233966Windows: 227. Win32 C/C++ - Dialog Procedure를 재정의하는 방법파일 다운로드1
13284정성태3/13/20234230Windows: 226. Win32 C/C++ - Dialog에서 값을 반환하는 방법파일 다운로드1
13283정성태3/12/20233712오류 유형: 852. 파이썬 - TypeError: coercing to Unicode: need string or buffer, NoneType found
13282정성태3/12/20234041Linux: 58. WSL - nohup 옵션이 필요한 경우
13281정성태3/12/20234024Windows: 225. 윈도우 바탕화면의 아이콘들이 넓게 퍼지는 경우 [2]
13280정성태3/9/20234774개발 환경 구성: 670. WSL 2에서 호스팅 중인 TCP 서버를 외부에서 접근하는 방법
13279정성태3/9/20234272오류 유형: 851. 파이썬 ModuleNotFoundError: No module named '_cffi_backend'
13278정성태3/8/20234282개발 환경 구성: 669. WSL 2의 (init이 아닌) systemd 지원 [1]
13277정성태3/6/20234936개발 환경 구성: 668. 코드 사인용 인증서 신청 및 적용 방법(예: Digicert)
13276정성태3/5/20234635.NET Framework: 2102. C# 11 - ref struct/ref field를 위해 새롭게 도입된 scoped 예약어
13275정성태3/3/20234891.NET Framework: 2101. C# 11의 ref 필드 설명
13274정성태3/2/20234504.NET Framework: 2100. C# - ref 필드로 ref struct 타입을 허용하지 않는 이유
13273정성태2/28/20234234.NET Framework: 2099. C# - 관리 포인터로서의 ref 예약어 의미
13272정성태2/27/20234473오류 유형: 850. SSMS - mdf 파일을 Attach 시킬 때 Operating system error 5: "5(Access is denied.)" 에러
13271정성태2/25/20234426오류 유형: 849. Sql Server Configuration Manager가 시작 메뉴에 없는 경우
13270정성태2/24/20233963.NET Framework: 2098. dotnet build에 /p 옵션을 적용 시 유의점
13269정성태2/23/20234596스크립트: 46. 파이썬 - uvicorn의 콘솔 출력을 UDP로 전송
13268정성태2/22/20235100개발 환경 구성: 667. WSL 2 내부에서 열고 있는 UDP 서버를 호스트 측에서 접속하는 방법
13267정성태2/21/20234984.NET Framework: 2097. C# - 비동기 소켓 사용 시 메모리 해제가 finalizer 단계에서 발생하는 사례파일 다운로드1
13266정성태2/20/20234624오류 유형: 848. .NET Core/5+ - Process terminated. Couldn't find a valid ICU package installed on the system
13265정성태2/18/20234564.NET Framework: 2096. .NET Core/5+ - PublishSingleFile 유형에 대한 runtimeconfig.json 설정
13264정성태2/17/20236094스크립트: 45. 파이썬 - uvicorn 사용자 정의 Logger 작성
1  2  3  4  5  6  7  8  9  10  11  12  13  [14]  15  ...