2011-02-02 3 views
3

"인증서 'CN = tempcert'에 키 교환이 가능한 개인 키가 있어야합니다. 프로세스에 개인 키에 대한 액세스 권한이 있어야합니다."라는 오류 메시지가 나타납니다. HTTP를 사용하여 Win7에서 WCF 서비스를 실행하십시오. "NetworkService"를 사용하도록 응용 프로그램 풀을 변경합니다. 로컬 컴퓨터를 사용하여 서버 인증서를 설치했습니다. 인증서는 인증서 MMC의 로컬 컴퓨터/개인/인증서 아래에 표시됩니다. 인증서를 두 번 클릭하면 개인 키가 있음을 알립니다. 그런 다음 FindPrivateKey 유틸리티를 실행하고 C : \ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys 폴더에서 개인 키를 찾습니다. 나는 MMC의 인증서 Addin에 들어가서 NETWORK SERVICE 계정에 대한 모든 권한을 부여 받았습니다. 그런 다음 Windows 탐색기의 폴더로 이동하여 NETWORK SERVICE가 해당 폴더와 특정 키 파일에 대한 전체 권한을 가지고 있는지 확인했습니다. 그러나 WCF 서비스를 실행할 때마다 개인 키를 찾을 수 없다는 오류가 발생합니다. 내가 뭘 할 수 있는지 전혀 모르겠다.WCF 서비스에서 개인 키에 대한 사용 권한을 얻을 수 없습니다.

답변

4

인증서를 만들 때 -sky exchange을 지정해야합니다.

makecert -sk SignedByCA -iv TempCA.pvk -n "CN=localhost" -ic 
    TempCA.cer SignedByCA.cer -sr LocalMachine -ss My -sky exchange -pe 
4

나는 이것 또한 고민했습니다. 빠른 수정이 필요하지 않습니다. "-sky exchange"는이 오류의 원인 일 수 있지만 자체 서명 된 인증서를 작성할 때 "-sky exchange"를 설정했지만 여전히이 오류가 발생했습니다. 개인 키 액세스 권한 및 인증서 위치를 포함하여이 문제를 일으킬 수있는 다른 문제가 있습니다.

Windows 서비스로 WCF 호스트를 실행하는 경우/경우에 적용 할 수

: 내가 수동으로 WCF 서비스를 시작하면, 내 경우에는 개인 키 에

액세스 권한을가 상속 내 (관리 그룹) 사용자 계정의 권한과 WCF 서비스가 인증서를 찾는 데 아무런 문제가 없었습니다. 그러나 WCF 호스트를 시작하기 위해 Windows 서비스를 사용했을 때 서비스의 권한을 상속 받았으며이 동일한 오류가 발생했습니다.

필자의 경우 Service Manager 창에서 내 서비스를 실행하는 계정이 "로컬 시스템"으로 표시됩니다.이 서비스는 실제로 "NT AUthority/System"을 의미합니다. 그래서 그 계정에 개인 키 컨테이너에 대한 액세스 권한을 부여해야했습니다. "모두"놀랍게도 충분히 좋지 않았습니다. 파일 폴더에 대한 액세스 권한을 설정하는 것과 마찬가지로 MMC 또는 FindPrivatekey.exe를 사용하여 키 보관함에 권한을 할당하고 수동으로 파일 탐색기를 사용하여 권한을 설정할 수 있습니다.

저장 위치 - 또 다른 요인 또한, 내 경우에는, 나는 "LocalMachine"또는 "CurrentUser"상점에 액세스하지 않은에서 실행 된 계정, 그래서 위치 내 인증서 표시는 소용이 있었다. 이 서비스는 MMC를 사용하여 인증서를 "서비스 (서비스 이름)"로 가져 오거나 복사 할 때만 작동하기 시작했습니다.

이렇게 할 수 있습니다 : MMC를 열고 목록에서 "인증서"를 선택하십시오. 내 사용자 계정 (CurrentUser), 서비스 계정 (서비스 선택) 및 컴퓨터 계정 (LocalMachine)의 세 가지 옵션이 표시됩니다. 서비스 계정을 선택하고 WCF 호스트가 실행되는 서비스를 선택하면됩니다.

내 대답은 완벽한 "방법"이 아니며,이 문제로 어려움을 겪고있는 사람들에게 유용한 힌트입니다. 내 문서 작성을 위해 작성한 "방법"은 10 페이지였습니다.

+0

또한 CSP (레거시 CryptoAPI)와 KSP (CNG, CryptoNextGen)의 차이점에 유의하십시오. 일부 구형 앱은 KSP/CNG와 잘 맞지 않습니다. – Nic

2

MMC> 파일 관리>>> 모든 작업을 마우스 오른쪽 단추로 클릭> 인증서를 찾은 다음 OK> 컴퓨터 계정> 다음> 마침> 스냅인> 인증서> 추가

추가/제거를 개인 키

cert를 사용하는 사용자 또는 서비스를 추가하고 모든 권한을 부여하십시오.

당신은 모든 세트가 서비스를 다시 시작합니다 :) 그리고 나도이 예외를 얻고 있었다

0

그것을 작동합니다. 내부 예외 검사 : System.Security.Cryptography.CryptographicException: Invalid provider type specified. 이 기사 (https://msdn.microsoft.com/en-us/library/aa738624(v=vs.100).aspx)가 지원되지 않는 것으로 강조 표시된 Windows Server 2008의 .NET 3.5에서 CNG 인증서를 사용하고있는 것으로 나타났습니다.

사용중인 인증서 유형을 확인하려면 Certutil -store my 명령을 실행하고 제공자 필드를 찾으십시오.

  • 마이크로 소프트는 암호화 공급자 v1.0을 향상된 말한다면 - 다음은 CSP 인증서입니다.
  • 그것은 입니다. Microsoft 소프트웨어 키 저장소 공급자 - 그러면 CNG (KSP) 인증서입니다.

어쨌든이 정보가 동일한 문제가있는 사람에게 유용하기를 바랍니다.

+0

아, CSP를 사용하여 새 인증서를 롤백하는 것이 수정되었습니다. – gottlieb76

관련 문제