Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 20. 인증서 오류 체크 목록 [링크 복사], [링크+제목 복사],
조회: 29439
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)

WSE 2.0/3.0에서부터 인증서를 이용한 프로그래밍이 눈길을 끌기 시작하다가, 최근의 WCF에서는 분위기가 왠지 인증서가 "기본"이 된 것 같은 분위기입니다. 암호화 지원이 기본 모드가 된 것도 특징이지요.

인증서와 관련해서는 확인해야 될 사항들이 정말 많습니다. 저 같은 경우에도, 인증서 관련 작업과는 무관하게 아무 생각 없이 잠시 시스템 날짜를 변경했다가, 다시 복원하는 것을 잊어먹고 인증서 관련 작업을 하면서 꽤나 애를 먹은 적이 있었습니다.

인증서가 유효한지에 대한 정리를 해 놓은 간단한 글이 눈에 띄어서, 저도 나름대로 좀 더 자세하게 정리해 보려 합니다.

Dealing with SSL Certificate Validation Failures
; http://blogs.msdn.com/drnick/archive/2006/11/07/dealing-with-ssl-certificate-validation-failures.aspx

기본 뼈대는 위의 목차를 따르고, 좀 더 살을 붙여서 이야기 해나가겠습니다.



1. Has the certificate expired or been revoked?

인증서가 만료되었는지, 아니면 폐기되었는지를 확인해야 하는 것... 기본입니다.

일단 인증서가 만료되었는지는 아래 그림에서와 같이 해당 인증서의 유효 날짜를 보면 쉽게 알 수 있습니다.

cert_validate_check_1.png

문제는 폐기된 인증서인데요. 어떤 경우에 있어서는, 좀 더 보안을 확고히 하기 위해 반드시 CRL(Certificates Revocation List)를 확인하게 만들 수도 있습니다. 이 과정에서 CRL 파일을 구할 수 없는 경우 오류를 내는 경우도 있으므로 이런 것들을 모두 확인하셔야 합니다.

CRL에 관한 것은 다음의 토픽에서 좀 더 자세히 알아보실 수 있습니다.

6. CRL(Certificate Revocation List) 관리
; https://www.sysnet.pe.kr/2/0/414




2. Does the MMC Certificate Manager say that the certificate is valid?

개인적으로, 아직은 MMC 인증서 관리자와 IE의 인증서 보기에 대한 유효성 검사의 차이점은 잘 모르겠습니다. 하지만, 어쨌든 여러분이 인증서와 관련하여 문제가 있다면, 역시나 MMC 관리자를 통해서 유효한 인증서라고 표시가 되는지 다시 한번 확인해 보시는 것도 좋겠습니다. 이와 관련해서는 다음의 토픽을 참조하시면 도움이 되실 것입니다.

5.3 인증서 관리 - 인증서 MMC 관리자
; https://www.sysnet.pe.kr/2/0/395




3. Is the certificate in the LocalMachine store?

이것은 매우 빈번하게 실수할 수 있는 문제입니다. 예를 들어, 여러분들이 사용하는 인증서가 "MY" 영역에 등록이 된 경우에는, 보통의 IIS 서비스가 구동되는 서비스 계정에서는 접근이 안되므로 에러가 발생하게 됩니다. 따라서, 반드시 특정 사용자에 국한해서 사용되는 것이라면, 그 사용자의 "MY" 영역에 두도록 하고, 전역적으로 접근하도록 허용하고 싶다면 "Local Computer" 영역에 두도록 해야 합니다. 이 차이점 역시, "인증서 MMC 관리자"를 통해서 확인할 수 있습니다.

또한, 인증서 MMC 관리자를 통해서 해당 인증서가 정상적으로 "LocalMachine" 영역에 있다고 하더라도, 중요한 것은 실제 인증서 파일이 특정 사용자 계정이 사용하는 폴더에 저장되지 않았다는 것을 확인해야 합니다. 이에 관해서는 다음의 토픽을 참고하십시오.

인증서 설치 확인
; https://www.sysnet.pe.kr/2/0/429#check_cert_path




4. Have you registered the certificate to the address and port of your service?

당연하겠지만, 해당 서비스를 제공하고 있는 주소에 부합하는 인증서가 로컬에 등록되어져 있어야 할 것입니다. 역시 "인증서 MMC 관리자"를 통해서 해당 인증서가 등록되어져 있는지 확인할 수 있습니다. 사실 3번 문제를 확인하게 되면 4번 문제는 굳이 할 필요는 없는 듯 싶군요.




5. Does the registered thumbprint match the SHA1 thumbprint of the certificate?

최근의 인증서에서는 해시 알고리즘을 MD5보다는, 더 보안성이 좋은 SHA1을 쓰고 있는 추세입니다. 이는 WCF 및 Windows CardSpace에도 영향을 미치고 있는데요. 기본적으로 WCF는 thumbprint 값을 확인하는데, 무조건 SHA1 알고리즘이 사용되었다고 가정하고 동작을 합니다. 따라서 해당 인증서가 MD5 방식으로 손도장(thumbprint) 값을 가지고 있다면 오류가 발생하게 됩니다.




6. Does the certificate address match the address in your service URI?

(예전의 저를 포함해서 ^^) 대부분의 개발자들이 오류를 범하고 마는 부분입니다. 대표적으로, 서버 인증서의 경우 해당 URL로 접근할 수 있는 "도메인"까지도 인증서에 포함이 되어 발급됩니다. 예를 들어, 다음과 같은 인증서가 있다고 가정하는 경우,

cert_validate_check_2.png

위와 같은 SSL 인증서가 설치된 사이트를 Internet Explorer를 이용하여 "https://www.sysnet.pe.kr"라고 접근하면 상관이 없지만, "https://w32.sysnet.pe.kr"이라고 접근하게 되면 오류가 나게 됩니다. 물론 이러한 처리는 프로그램마다 다를 수 있습니다. 예를 들어, VS.NET 2005의 웹 참조 대화창에서는 웹 서비스 참조가 아예 안 되기도 합니다. (흔히들, 개발자 스스로의 PC에 인증서를 설치했다면 http://localhost/... 라고 웹 참조를 걸기도 하지요.)




7. Is the root certificate valid and in the trusted root store?

대개의 경우, 인증서 서비스를 통해서 SSL 인증서 또는 개인 인증서를 발급받게 됩니다. 따라서, 발급받은 그 인증서의 유효성은 루트 인증서가 유효하지 않으면 가치가 없는 것입니다. 그러니, 여러분들이 사용하게 될 인증서를 발급한 "인증 경로"상의 인증서들이 모두 올바른지 확인을 해봐야 합니다. 아시겠지만, 인증 경로는 다음 화면과 같이 인증서 등록 정보의 "Certificate Path"에서 확인할 수 있습니다.

cert_validate_check_3.png




8. Is the certificate revocation server reachable and functioning?

1번에서 이미 모두 설명을 드렸습니다. 해당 인증서가 폐기(revoked)되었는지에 대한 여부를 알기 위해서는 CDP를 알아내서 CRL 목록을 다운로드할 수 있어야 합니다. 어떤 서비스들에서는 CRL 목록을 확인하는 것이 기본 설정되어 있으며 이런 경우 CDP 접근을 할 수 없으면 아예 인증서 유효성 검사에 실패를 해버리는 경우가 있습니다.




"질문" 게시판의 "양덕진" 님이 질문하신 내용에 대해서 이렇게 정리를 하게 되었습니다. 좀 더 일찍 정리를 했어야 하는데, 이것을 설명하기 위한 선행 토픽("CRL 관리")도 준비해야 했고, 또한 그동안 개인적인 사정으로 인해 이렇게 늦어지게 되었네요. ^^



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

[연관 글]






[최초 등록일: ]
[최종 수정일: 7/10/2021]

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

비밀번호

댓글 작성자
 




... 91  [92]  93  94  95  96  97  98  99  100  101  102  103  104  105  ...
NoWriterDateCnt.TitleFile(s)
11635정성태8/1/201818705오류 유형: 472. C# 컴파일 오류 - Your project is not referencing the ".NETFramework,Version=v3.5" framework.
11634정성태8/1/201821667.NET Framework: 790. .NET Thread 상태가 Cooperative일 때 GC hang 현상 재현 방법파일 다운로드1
11633정성태7/29/201825616Graphics: 15. Unity - shader의 World matrix(unity_ObjectToWorld)를 수작업으로 구성 [2]파일 다운로드1
11632정성태7/28/201827930Graphics: 14. C# - Unity에서 캐릭터가 바라보는 방향을 기준으로 카메라의 위치 이동 및 회전하는 방법
11631정성태7/27/201829891Graphics: 13. Unity로 실습하는 Shader (9) - 투명 배경이 있는 텍스처 입히기 [1]
11630정성태7/27/201825026개발 환경 구성: 391. (GitHub 등과 직접 연동해) 소스 코드 디버깅을 쉽게 해 주는 SourceLink [3]
11629정성태7/26/201823812.NET Framework: 789. C# 컴파일 옵션 - Check for arithmetic overflow/underflow [2]
11628정성태7/25/201825651Graphics: 12. Unity로 실습하는 Shader (8) - 다중 패스(Multi-Pass Shader)
11627정성태7/25/201820059개발 환경 구성: 390. C# - 컴파일러 옵션 OSS signing / Public Signing
11626정성태7/25/201818413오류 유형: 471. .C++ 함수를 const로 바꾼 경우 C2440 컴파일 오류가 발생한다면?
11625정성태7/24/201817640Math: 49. GeoGebra 기하 (25) - 타원의 중심점 찾기파일 다운로드1
11624정성태7/24/201822075개발 환경 구성: 389. C# - 재현 가능한 빌드(reproducible builds) == Deterministic builds [4]
11623정성태7/24/201821462Math: 48. C# - 가우시안 함수의 이산형(discrete) 커널 값 생성파일 다운로드1
11622정성태7/23/201821621개발 환경 구성: 388. Windows 환경에서 Octave 패키지 설치하는 방법
11621정성태7/23/201819230VC++: 127. 멤버 함수에 대한 포인터를 외부에서 호출하는 방법파일 다운로드1
11620정성태7/22/201822488Graphics: 11. Unity로 실습하는 Shader (7) - Blur (평균값, 가우스, 중간값) 필터 [1]파일 다운로드1
11619정성태7/21/201821529Graphics: 10. Unity로 실습하는 Shader (6) - Mosaic Shading
11618정성태7/20/201818613개발 환경 구성: 387. 삼성 오디세이(Odyssey) 노트북의 운영체제를 새로 설치하는 방법
11617정성태7/20/201819395Team Foundation Server: 50. TFS 소스 코드 관리 기능 (5) - "Rollback", "Rollback Entire Changeset"
11616정성태7/17/201818754Graphics: 9. Unity Shader - 전역 변수의 초기화
11615정성태7/17/201823095.NET Framework: 788. RawInput을 이용한 키보드/마우스 입력 모니터링파일 다운로드1
11614정성태7/17/201825324Graphics: 8. Unity Shader - Texture의 UV 좌표에 대응하는 Pixel 좌표
11613정성태7/16/201821624Graphics: 7. Unity로 실습하는 Shader (5) - Flat Shading
11612정성태7/16/201820596Windows: 148. Windows - Raw Input의 Top level collection 의미
11611정성태7/15/201820828Graphics: 6. Unity로 실습하는 Shader (4) - 퐁 셰이딩(phong shading)
11610정성태7/15/201817376Graphics: 5. Unity로 실습하는 Shader (3) - 고로 셰이딩(gouraud shading) + 퐁 모델(Phong model) + Texture
... 91  [92]  93  94  95  96  97  98  99  100  101  102  103  104  105  ...