Microsoft MVP성태의 닷넷 이야기
.NET Framework: 670. C# - 실행 파일로부터 공개키를 추출하는 방법 [링크 복사], [링크+제목 복사],
조회: 20281
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

C# - 실행 파일로부터 공개키를 추출하는 방법

일반적인 파일인 경우 '코드 서명(Authenticode)' 방법으로 파일에 대해 서명할 수 있는데, 그러면 검증을 위해 반드시 그 파일 내에 공개키를 포함하게 됩니다. 대표적으로 ActiveX를 만들어 본 분들은 Authenticode 코드를 한 번쯤 사용해봤을 텐데요, 이러한 Authenticode로 서명된 파일로부터 공개키를 추출하는 방법은 다음의 질문 답변에 예제 코드와 함께 실려 있습니다.

How to extract public key from a .Net DLL in C#? [duplicate]
; https://stackoverflow.com/questions/28832048/how-to-extract-public-key-from-a-net-dll-in-c

위의 답변을 정리해 보면, 공개키 인증서가 "Trusted Root Certification Authorities"에 등록된 경우라면 다음의 코드로 뽑아낼 수 있고,

Assembly assembly = Assembly.LoadFrom("dll_file_name");
X509Certificate certificate = assembly.ManifestModule.GetSignerCertificate();

byte[] publicKey = certificate.GetPublicKey();

등록되지 않은 경우라면 X509Certificate.CreateFromSignedFile 메서드를 사용할 수 있다고 합니다.

X509Certificate executingCert = X509Certificate.CreateFromSignedFile("dll_file_name");
byte[] publicKey = certificate.GetPublicKey();




추가로, 닷넷(.NET) 실행 파일인 경우에는 .snk 파일을 이용한 서명이 하나 더 제공됩니다. 이렇게 서명된 닷넷 어셈블리를 '강력한 이름의 어셈블리(Strong-named assembly)'라고 하는데 이 파일로부터 공개키를 얻고 싶다면 sn.exe를 이용해,

Sn.exe (Strong Name Tool)
; https://docs.microsoft.com/en-us/dotnet/framework/tools/sn-exe-strong-name-tool

다음과 같이 추출할 수 있습니다.

sn -e ClassLibrary1.dll test.snk

(개인키가 포함되어 있지 않아) 당연한 이야기지만, 이렇게 얻은 test.snk 파일로는 강력한 이름의 어셈블리를 만들기 위한 서명 작업으로는 사용할 수 없고 대신 지연 서명된 어셈블리를 만드는 용도로는 쓸 수 있습니다.




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







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

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

비밀번호

댓글 작성자
 




... 166  167  168  169  170  171  172  173  174  175  [176]  177  178  179  180  ...
NoWriterDateCnt.TitleFile(s)
633정성태12/20/200826108기타: 24. RMClock for x64 [2]
632정성태12/19/200834560기타: 23. D820 - 배터리 없이 바이오스 업데이트 방법 [2]파일 다운로드1
631정성태12/10/200843564VC++: 36. Detours 라이브러리를 이용한 Win32 API - Sleep 호출 가로채기 [3]
630정성태12/9/200824380.NET Framework: 117. WPF - TreeView에서 항목이 펼쳐질 때 Cursors.Wait 사용파일 다운로드1
629정성태12/7/200833581.NET Framework: 116. 소켓 연결 시간 제한
628정성태12/6/200822149.NET Framework: 115. Marshal 타입 관련 2가지 자원 해제 메서드파일 다운로드1
627정성태12/6/200824771VS.NET IDE: 58. VS.NET IDE 팁 - 커서 위치 이동 [1]
626정성태12/6/200824846오류 유형: 65. TF53018: The application tier XXXXXXX is attempting to connect to a data tier with an incompatible version
625정성태12/6/200825060오류 유형: 64. TFS 2008 SP1 설치 - MsiApplyMultiplePatches returned 0x643
624정성태12/5/200826022.NET Framework: 114. WPF 이벤트에 속한 핸들러 확인 [2]파일 다운로드1
623정성태12/4/200830475디버깅 기술: 22. VS.NET SP1 + .NET Framework 소스 코드 디버깅 [2]파일 다운로드1
622정성태12/1/200832760오류 유형: 63. WPF - XamlParseException 대응 방법 [2]
621정성태11/30/200824785Team Foundation Server: 27. TeamBuild + VDPROJ 셋업 프로젝트 [1]
620정성태11/30/200823678디버깅 기술: 21. 올바른 이벤트 예외 정보 출력
619정성태11/30/200823811디버깅 기술: 20. 예외 처리를 방해하는 WPF Modal 대화창파일 다운로드1
618정성태11/29/200824101.NET Framework: 113. 이벤트에 속한 이벤트 핸들러 확인파일 다운로드1
617정성태11/26/200830288.NET Framework: 112. How to Interop DISPPARAMS [2]파일 다운로드2
616정성태11/26/200823590디버깅 기술: 19. C++/CLI - F11 디버깅 시의 변수 초기화파일 다운로드1
615정성태11/9/200833181.NET Framework: 111. WPF - Window, UserControl 클래스 상속 [1]
614정성태11/9/200833136.NET Framework: 110. WPF - 전역 예외 처리 [4]파일 다운로드1
613정성태11/8/200822670.NET Framework: 109. WPF - SystemColors 색상표파일 다운로드1
612정성태11/1/200828035.NET Framework: 108. WPF + WCF 환경에서는 DataContract를 권장 [1]
611정성태10/31/200822058오류 유형: 62. WPF - Visual Studio 2008 비정상 종료
610정성태10/24/200824627Team Foundation Server: 26. TFS 2008 SP1 + SQL Server 2008 설치
609정성태10/24/200828738.NET Framework: 107. WPF - RadioButton 데이터 바인딩 해제 현상파일 다운로드2
608정성태10/23/200822881오류 유형: 61. TFS 연결 오류: TF31003, TF30331 오류
... 166  167  168  169  170  171  172  173  174  175  [176]  177  178  179  180  ...