Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 2개 있습니다.)

Visual Studio에서 pfx 파일로 서명한 경우, 암호는 어디에 저장될까?

다음과 같은 질문이 있는데요.

소스세이프 사용시 pfx 파일 빌드 실패
; https://www.sysnet.pe.kr/3/0/1067

재현을 하자면, 아래와 같이 프로젝트에 대해 서명할 때 사용하는 pfx 파일의 비밀번호를 설정하는 경우,

pfx_co_op_1.png

위의 프로젝트를 소스 제어(소스 세이프나 TFS 소스 컨트롤)에 포함시키고 다른 개발자가 다운로드 받아서 빌드하게 되면 pfx 때문에 아래와 같은 빌드 오류가 발생합니다.

pfx_co_op_2.png

Cannot import the following key file: test.pfx. The key file may be password protected. To correct this, try to import the certificate again or manually install the certificate to the Strong Name CSP with the following key container name: VS_KEY_5BA0AFAB813A51FF

Importing key file "test.pfx" was canceled.





질문의 답변에 제가 명시한 것처럼, 이런 경우 정말로 "암호가 있는 pfx" 파일로 서명해야 하는지를 스스로 질문을 던져야 합니다. 사실, 여기서 대부분의 개발자가 단순 snk 파일로 서명을 하는 것으로 방향을 바꾸어 문제를 해결할 수 있습니다.

하지만, 절대로 pfx를 이용하여 서명을 해야 한다고 하면 이제 좀 ^^ 괴로워집니다.

우선, pfx는 암호를 가지기 때문에 모든 개발자에게 암호를 알려주고 스스로 입력하라고 할 수 있습니다. 사실 이럴 거면 pfx를 사용한 의미가 많이 퇴색하지요. 따라서, 일반적으로는 관리자 한 명이 개발자들 PC에 일일이 돌아다니면서 pfx 암호를 직접 입력해 주어야 합니다.

암호 입력 방법은 어렵지 않습니다. "Cannot import the following key file" 빌드 오류가 발생하는 개발자 PC에 가서, 프로젝트 속성창을 띄운 다음 아래와 같이 pfx 파일을 다시 한번 '의도적으로' 선택해 주면,

pfx_co_op_3.png

이렇게 비밀번호를 묻는 창이 뜹니다.

pfx_co_op_4.png

한번 입력해 두면, 두번 다시 묻지 않기 때문에 개발자들은 이후 별다른 수고로움없이 빌드를 할 수 있습니다.

하지만, 마이크로소프트는 실제 서명에 사용되는 "인증 파일"을 여러 곳에 배포하는 것은 위험하다고 판단해서 별도로 "delay sign" 옵션을 두었습니다. 이에 대해서는 다음의 글을 참고하시기 바랍니다.

When to Delay Sign Assemblies
; https://www.c-sharpcorner.com/article/when-to-delay-sign-assemblies/

어쨌든, 2가지 방법 모두 관리적인 요소가 들어가므로 수고로움은 각오를 해야 합니다.




그런데, 문득... 개인적으로 궁금한 점이 생겼습니다. Visual Studio에서 pfx에 대해 암호를 한번 설정해 주면 이후로는 다시 묻지 않고 해당 pfx 파일로 빌드를 할 수 있게 해주는데... 그렇다면 그 정보가 어딘가 저장된다는 의미인데... 도대체 어디일까요? ^^

이에 대한 답은... ^^ 혹시 기억하실지 모르겠지만 예전에 이미 한번 언급한 적이 있었습니다.

인증서의 개인키를 담은 물리 파일 위치 알아내는 방법
; https://www.sysnet.pe.kr/2/0/865

pfx에 대해 설치를 한 것은 아니므로 '인증서 관리자'에는 나오지 않지만, Visual Studio는 pfx의 암호를 알아낸 뒤 개인키를 추출해서 별도의 폴더에 보관해 놓는데, 그것이 인증서의 개인키 파일 위치와 동일합니다.

실제로, Visual Studio에서 pfx의 암호를 입력하면 다음과 같은 2군데의 폴더에 새로운 파일이 생성됩니다.

C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys

%USERPROFILE%\AppData\Roaming\Microsoft\Crypto\RSA\AppData\Roaming\Microsoft\Crypto\RSA\[로그인 사용자 SID]
또는
%USERPROFILE%\AppData\Roaming\Microsoft\Crypto\RSA\[로그인 사용자 SID]

* "로그인 사용자 SID"는 "wmic useraccount where name='%USERNAME%' get sid" 명령어로 알아낼 수 있습니다.

아래에 보시면, 오늘 테스트한 날짜로 파일이 하나 생성된 것이 확인됩니다.

pfx_co_op_5.png

테스트를 해보니, "로그인 사용자 ID" 경로의 파일의 유무는 Visual Studio 빌드에 아무런 영향을 주지 않았지만, "C:\ProgramData" 하위 경로의 파일을 삭제한 경우에는 다시 빌드 오류가 발생하였습니다.




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

[연관 글]






[최초 등록일: ]
[최종 수정일: 6/20/2023]

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

비밀번호

댓글 작성자
 



2019-10-28 01시14분
[초보자] 서명에서 파일을 선택하면 암호입력하는 창이 나와야하는데 입력창이 나오지 않는 경우는 어떻게 해야할까요 ??
참고로 관리자권한실행하였습니다.
[guest]
2019-10-28 03시52분
선택한 인증서 파일에 암호가 있나요?
정성태

... 151  152  153  154  155  156  157  158  159  160  161  162  [163]  164  165  ...
NoWriterDateCnt.TitleFile(s)
1004정성태3/3/201125960개발 환경 구성: 109. SharePoint Health Analyzer 디스크 부족 경고 제어
1003정성태3/3/201126937오류 유형: 113. SQL Server - DB Attach 시 Parameter name: nColIndex 오류 발생
1002정성태3/2/201125276Team Foundation Server: 44. TFS 설치 후, Team Portal의 Dashboard를 빠르게 확인하는 방법
1001정성태3/2/201129338Team Foundation Server: 43. TFS 2010 + SharePoint 2010 설치
1000정성태3/1/201134388오류 유형: 112. Remote FX RDP 연결 시 오류 유형 2가지 [5]
999정성태2/28/201147577개발 환경 구성: 108. RemoteFX - Windows 7 가상 머신에서 DirectX 9c 환경을 제공 [5]
998정성태2/27/201121456Team Foundation Server: 42. TFS Application-Tier만 재설치
996정성태2/12/201138994디버깅 기술: 35. windbg - 분석 예: 시작하자마자 비정상 종료하는 프로세스 - NullReferenceException
995정성태2/11/201157499.NET Framework: 205. 코드(C#)를 통한 풀 덤프 만드는 방법 [4]
994정성태2/10/201137366디버깅 기술: 34. Windbg - ERROR: Unable to load DLL mscordacwks_x86_x86_2.0.50727.4200.dll, Win32 error 0n2 [1]
993정성태2/10/201129753개발 환경 구성: 107. 하나의 WPF 프로젝트를 WinExe / Library로 빌드하는 방법
992정성태10/15/201130614개발 환경 구성: 106. VSS(Volume Shadow Service)를 이용한 Hyper-V VM 백업/복원 [2]
991정성태2/6/201150026개발 환경 구성: 105. 풀 덤프 파일을 남기는 방법 [4]
990정성태2/2/201135116개발 환경 구성: 104. Visual C++ Custom Build Tool 사용예 [1]파일 다운로드1
989정성태2/1/201131589개발 환경 구성: 103. DOS batch - 동기 방식으로 원격 서비스 제어
988정성태1/30/201127630개발 환경 구성: 102. MSBuild - DefineConstants에 다중 전처리 값 설정
987정성태1/29/201140906디버깅 기술: 33. PDB Symbol 로드 오류 - Cannot find or open the PDB file. [2]
986정성태1/26/201132350.NET Framework: 204. 분리된 ThreadPool 사용 - Smart Thread Pool
985정성태1/25/201128962디버깅 기술: 32. 인증서로 서명된 닷넷 어셈블리의 실행 지연 현상
984정성태1/25/201123575개발 환경 구성: 101. SharePoint 2010 - Form Design
983정성태1/23/201128893제니퍼 .NET: 15. 눈으로 확인하는 maxWorkerThreads, minFreeThreads 설정값 [1]
982정성태1/22/201125818개발 환경 구성: 100. SharePoint 2010 - iPad 친화적인 게시판 만들기 (사용자 지정 목록) [1]
981정성태1/19/201122000개발 환경 구성: 99. SharePoint 2010 - 웹 애플리케이션 생성 시 고려해야 할 점. [1]
980정성태1/19/201133489개발 환경 구성: 98. SharePoint 2010 - Office Web Apps 설치
979정성태1/18/201126133개발 환경 구성: 97. SharePoint 2010 팀 사이트 구성
978정성태1/16/201133131.NET Framework: 203. VPN 자동 연결 및 Router 설정 추가
... 151  152  153  154  155  156  157  158  159  160  161  162  [163]  164  165  ...