[visual-studio-2010] ‘blah.pfx’키 파일을 가져올 수 없습니다- ‘키 파일이 비밀번호로 보호되어있을 수 있습니다’오류

방금 Visual Studio 2008 프로젝트를 Visual Studio 2010으로 업그레이드했습니다. 모든 어셈블리는 Verisign 코드 서명 인증서를 사용하여 강력하게 서명되었습니다 . 업그레이드 이후 지속적으로 다음과 같은 오류가 발생합니다.

companyname.pfx 키 파일을 가져올 수 없습니다. 키 파일은 암호로 보호되어있을 수 있습니다. 이를 정정하려면 인증서를 다시 가져 오거나 다음 키 컨테이너 이름으로 인증서를 강력한 이름 CSP에 수동으로 설치하십시오. VS_KEY_3E185446540E7F7A

일부 개발자 컴퓨터에서는 발생하지만 다른 개발자 컴퓨터에서는 발생하지 않습니다. 이 문제를 해결하는 데 사용 된 몇 가지 방법은 다음과 같습니다.

  • Windows 탐색기에서 키 파일을 다시 설치하십시오 (PFX 파일을 마우스 오른쪽 단추로 클릭하고 설치를 클릭하십시오).
  • 새 컴퓨터에 Visual Studio 2010을 처음 설치하면 프로젝트를 처음 열 때 암호를 묻는 메시지가 표시되고 작동합니다. Visual Studio 2008에서 업그레이드 한 컴퓨터에서는이 옵션을 사용할 수 없습니다.

오류 메시지에서 알 수 있듯이 SN.EXE 유틸리티 (강한 이름 도구)를 사용하여 강력한 이름 CSP에 키를 등록 하려고 시도 했지만 Visual Studio 2010, SN과 함께 제공된 버전을 사용하여 옵션을 사용하여 도구를 실행할 때마다 .EXE는 작업 대신 명령 행 인수를 나열합니다. 이것은 내가 제공하는 인수에 관계없이 발생합니다.

왜 이런 일이 발생하며,이를 해결하기위한 명확한 단계는 무엇입니까? ClickOnce 설치 및 Microsoft 코드 서명 을 포기하려고 합니다.



답변

나는 또한이 문제에 부딪쳤다. 실행하여 문제를 해결할 수있었습니다
sn -i <KeyFile> <ContainerName>( 키 컨테이너를 명명 된 컨테이너에 설치합니다 ).

sn일반적으로 Windows SDK의 일부로 설치됩니다. 예를 들면 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe. 이 위치는 표준 환경의 검색 경로에 없을 가능성이 큽니다. 그러나 Visual Studio에서 설치 한 “개발자 명령 프롬프트”에는 일반적으로 올바른 위치가 포함 된 추가 정보가 추가됩니다.

다음과 같은 게시물을 기반으로합니다.

sn -i companyname.pfx VS_KEY_3E185446540E7F7A

PFX 파일의 위치에서 실행해야합니다. VS 2010에 솔루션을로드 한 경우 솔루션 탐색기에서 pfx 파일을 마우스 오른쪽 단추로 클릭하고 명령 프롬프트 열기를 선택하면 .net 2010 cmd 프롬프트 도구가 시작됩니다. 올바른 디렉토리.

이 sn 명령을 실행하기 전에 pfx를 마우스 오른쪽 버튼으로 클릭하고 설치를 선택하여 pfx를 다시 설치했지만 작동하지 않았습니다. 솔루션을 제공 한 두 가지의 조합 일 수 있으므로주의해야 할 점입니다.

이것이 문제를 해결하는 데 도움이되기를 바랍니다.


답변

다중 개발자 환경에서 성공적으로 빌드 할 수있는 수정 사항을 발견했습니다.

암호를 변경하는 대신 (.pfx가 변경됨) 콤보 박스에서 .pfx 파일을 다시 선택 하십시오. 그런 다음 비밀번호 대화 상자를 호출합니다. 암호를 입력하면 프로젝트가 정상적으로 빌드됩니다. 모든 개발자는 실제로 .pfx 파일을 수정하지 않고도 로컬 컴퓨터에서이 작업을 수행 할 수 있습니다.

빌드 서버 시스템에서 어셈블리에 서명하는 데 여전히 문제가 있습니다. 동일한 오류가 발생하지만 sn.exe -i 방법을 사용해도 빌드 서버의 문제가 해결되지 않습니다.


답변

나는 같은 문제가 있었고 상점을 삭제하고 읽을 수 없었습니다. 나는 다음을해야했다.

  • OpenSSL 사본을 확보하십시오 . 그것은는 Windows 용 가능 . 또는 Linux 상자를 사용하면 거의 모두 사용할 수 있습니다.

  • 키 파일로 내보내려면 다음을 실행하십시오.

    openssl pkcs12 -in certfile.pfx -out backupcertfile.key
    
    openssl pkcs12 -export -out certfiletosignwith.pfx -keysig -in backupcertfile.key
    

그런 다음 프로젝트 속성에서 PFX 파일을 사용할 수 있습니다.


답변

너무 빨리 말 했어요! 다시 빌드하면 오류가 다시 발생했습니다 …

솔루션 탐색기 에서 마우스 오른쪽 버튼을 클릭 하고 프로젝트에서 제외하십시오. 클릭 모든 파일보기 , 마우스 오른쪽 버튼으로 클릭하고 지금 다시 프로젝트에 포함되어 있습니다. 보류중인 변경 사항을 취소합니다 …

어떤 이유로 이것은 나를 위해 그것을 분류하고 상대적으로 고통이 없었습니다!


답변

경우에 따라 설치 하기 전에이 키 를 삭제 해야합니다. 다음을 수행하십시오.

  1. sn -d VS_XXXX
  2. sn -i mykey.pfx VS_XXX

답변

VSCommands 2010 (Visual Studio 용 플러그인)은이 문제를 자동으로 해결할 수 있습니다. 오류를 마우스 오른쪽 단추로 클릭하고 메뉴에서 수정 적용을 클릭하십시오. Visual Studio 갤러리에서 얻을 수 있습니다 .


답변

이 모든 솔루션 (및 훨씬 더)을 시도한 후에 문제가 다른 곳에 있다는 것을 알았습니다. 인증서를 구입 한 후 저와 같은 불행을 겪는 사람들을 위해, 저는 문제에 대한 해결책을 공유 할 것입니다.

행동

‘sign’은 DLL 또는 EXE에 인증 이름이 아닌 강력한 이름을 적용한다는 것을 이해합니다. 이것이 signtool 경우 작동하지만 Visual Studio의 ‘sign’은 작동하지 않습니다.

이유

과거에는 Verisign의 인증서에 대한 경험이있었습니다. KeySpec=2인증서에는 인증서 가 있습니다 .이 인증서는 Visual Studio에서 ‘서명’기능과 함께 사용됩니다. 이 인증서는 Visual Studio 및 signtool 모두에 적합합니다.

이제 KeySpec=1코드 서명 인증서에 잘못된 Comodo에서 인증서를 구입했습니다 . 즉, 이러한 인증서는 signtool (authenticode)에서는 제대로 작동하지만 강력한 이름 지정 (sign drop-down)에서는 그렇지 않습니다.

해결책

이 문제를 해결하는 두 가지 방법이 있습니다.

  1. 을 사용하여 강력한 이름에 대한 별도의 인증서를 만듭니다 sn -k [name].snk. snk를 사용하여 어셈블리에 서명 한 후 코드 서명 인증서와 함께 signtool을 사용하여 인증 서명으로 DLL / EXE에 서명하십시오. 이것이 이상한 것처럼 보이지만, 내가 이해하는 것으로부터 이것은 강력한 이름이 authenticode와 다른 목적을 갖기 때문에 인증서를 처리하는 올바른 방법입니다 ( 이 링크 참조 방법에 대한 자세한 를 참조하십시오).
  2. 인증서를로 가져옵니다 KeySpec=2. 이에 대한 절차는 여기자세히 설명되어 있습니다 .

여러 개의 강력한 이름을 사용하고 싶기 때문에 현재 옵션 (1)을 사용하지만 옵션 (2)도 작동합니다.


이 솔루션이 향후에 손실되지 않도록하기 위해 솔루션 2의 절차는 다음과 같습니다.

  1. “인증서”MMC를 사용하여 기존 키 세트 (KeySpec=1 )를 PFX 파일로 . 참고 :이 파일을 안전한 위치에 백업하고 파일을 안전하게 재생하려면 다른 컴퓨터에서 파일을 가져올 수 있는지 테스트하십시오!
  2. 암호화 저장소에서 기존 인증서를 삭제하십시오 (MCM 사용).
  3. CMD 프롬프트를여십시오.
  4. 이 명령을 사용하여 PFX 파일을 가져옵니다.
    1. certutil -importPFX -user <pfxfilename> AT_SIGNATURE
    2. 프롬프트가 표시되면 pfx의 비밀번호 문구를 입력하십시오.

이제 키셋 / 인증서를 가지고 있어야합니다 KeySpec=2. 필요한 경우 이제 MMC를 사용하여이 파일을 다른 PFX 파일로 내보낼 수 있습니다.