문제

나는 몇 가지는 코드를 호출하여 타사 웹 서비스를 사용하여 보안 X.509 인증입니다.

면 나는 직접 코드를 사용하여(단위 테스트)그것이 문제없이 작동합니다.

배포되는 경우,이 코드가 호출됩니다 를 통해 WCF 서비스입니다.을 추가하였습니다 두 번째 단위 테스트는 전화 WCF 서비스,그러나 이것은 실패로 CryptographicException, 메시지 "Keyset does not exist" 때 나는 메소드를 호출에는 타사 웹 서비스입니다.

나는 가정이기 때문에 내 WCF 서비스 호출을 시도 하는 타사 웹 서비스를 사용하여 다른 사용자가 자신입니다.

누구나 창고 추가 빛 이 문제에 대?

도움이 되었습니까?

해결책

아마도 인증서에 대한 권한 문제 일 것입니다.

단위 테스트를 실행할 때 자신의 사용자 컨텍스트에 따라 다른 테스트를 실행할 것입니다 (어떤 저장에 따라 고객 인증서가 있습니다)는 해당 인증서의 개인 키에 액세스 할 수 있습니다.

그러나 WCF 서비스가 IIS 또는 Windows 서비스로 호스팅되면 서비스 계정 (네트워크 서비스, 로컬 서비스 또는 기타 제한 계정)에 따라 실행될 수 있습니다.

해당 서비스 계정에 액세스 할 수 있도록 개인 키에 적절한 권한을 설정해야합니다. MSDN이 있습니다 세부 사항

다른 팁

IIS 사용자가 인증서의 개인 키에 액세스 할 수 없기 때문에 가능성이 높습니다. 이 단계에 따라 이것을 설정할 수 있습니다 ...

  1. 시작 -> run-> mmc
  2. 파일 -> Snapin 추가/제거
  3. 인증서 스냅을 추가하십시오
  4. 컴퓨터 계정을 선택한 다음 다음에 누르십시오
  5. 로컬 컴퓨터 (기본값)를 선택한 다음 완료를 클릭합니다.
  6. 콘솔 루트의 왼쪽 패널에서 인증서 (로컬 컴퓨터) -> 개인 -> 인증서로 이동
  7. 귀하의 인증서는 대부분 여기에있을 것입니다.
  8. 인증서를 마우스 오른쪽 버튼으로 클릭하십시오 -> 모든 작업 -> 개인 키 관리
  9. 개인 키 설정을 여기에 설정하십시오.

나는 동일한 문제는 마지막 밤이었다.에 대한 사용 권한 전용 키가 제대로 설정,모든 것은 분명히 잘를 제외하고 키가 존재하지 않 오류가 있습니다.결국 그는 인증서가 수입된 현재 사용자에게 저장하면 로컬 컴퓨터에 저장합니다.그러나는 움직이지 않았 개인 키에 아직도

C:\Documents 고 설\관리자...

C:\Documents 고 설\모든 사용자...

비록 사용 권한에서는 키가 올바르게 설정 ASPNET 에 액세스할 수 없습니다.때 우리는 다시 가져올 수 있도록 인증서 개인 키의 위치에 모든 사용자 지점,이 문제가 사라졌습니다.

를 해결하는"키는"존재하지 않을 때 브라우징에서 IIS: 될 수 있습에 대한 전용 허가

보고 권한:

  1. 실행>mmc>네
  2. 클릭 파일
  3. 클릭 스냅인 추가/제거에서...
  4. 더블 클릭합 인증서
  5. 컴퓨터 계정
  6. 다음
  7. 완료
  8. Ok
  9. 인증서를 클릭합(로컬 컴퓨터)
  10. 클릭하에 개인
  11. 인증서를 클릭하여

을 제공하는 권한이:

  1. 오른쪽의 이름을 클릭하면 인증서
  2. 모든 작업>개인 키 관리를...
  3. 추가고 권한(추가 IIS_IUSRS 와주는 권한 나를 위해 일)

Visual Studio에서 WCF 앱을 실행하려고하는 동안 같은 문제가있었습니다. Visual Studio를 관리자로 실행하여 해결했습니다.

이 문제에 직면했는데 개인 키가있는 인증서이지만이 오류가 발생했습니다 ("키즈가 존재하지 않는다")

원인: 귀하의 웹 사이트는 "네트워크 서비스"계정에 따라 실행되거나 권한이 적습니다.

해결책: 애플리케이션 풀 ID를 "로컬 시스템"으로 변경하고 IIS를 재설정하고 다시 확인하십시오. 작업을 시작하면 권한/적은 권한 문제가 발생하면 다른 계정을 사용하여 가장 할 수 있습니다.

완전히 실망스럽고, 나는 같은 문제를 겪었고 위의 대부분을 시도했습니다. 내보낸 인증서에는 파일을 읽을 권한이 올바르게 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys, 그러나 폴더에 대한 허가가 없었습니다. 그것을 추가하고 작동했습니다

나도 비슷한 문제가 있습니다. 나는 명령을 사용했다

findprivatekey root localmachine -n "CN="CertName" 

결과는 개인 키가 c : documents and settngs 모든 사용자 대신 c : programdata 폴더에 있음을 보여줍니다.

C : ProgramData 폴더에서 키를 삭제하면 다시 findPrivateKey 명령이 성공하지 못합니다. 즉. 키를 찾지 못합니다.

그러나 이전 명령에 의해 반환 된 동일한 키를 검색하면 여전히 키를 찾을 수 있습니다.

C : Documents and Settngs 모든 사용자 ..

따라서 IIS 또는 호스팅 된 WCF는 C : Documents 및 Settngs All 사용자에서 개인 키를 찾지 못합니다.

MVC 응용 프로그램을 실행할 때 오류가 발생했습니다. cryptographicexception 'Keyset은 존재하지 않습니다'.

해결책은 다음과 같습니다. 응용 프로그램 풀이 실행중인 계정에 개인 인증서에 액세스 할 수 있습니다. 제 경우에는 IIS_IUSRS를 추가하고 올바른 위치를 선택하면이 문제가 해결되었습니다.

RC on the Certificate - > All tasks -> Manage Private Keys -> Add->  
For the From this location : Click on Locations and make sure to select the Server name. 
In the Enter the object names to select : IIS_IUSRS and click ok. 

인터넷의 예제에서 생성 된 모든 키에 대한 권한을 부여 함에도 불구하고 "키 세트가 존재하지 않는"을지나 메시지 수준 보안으로 WCF 서비스를받는 데 도움이되는 정보가 누락 된 것을 발견했습니다.

마침내 개인 키를 현지 기계의 신뢰할 수있는 사람들 상점으로 가져온 다음 개인 키에 올바른 권한을 부여했습니다.

이것은 나를 위해 공란을 채웠고 마지막으로 메시지 수준 보안으로 WCF 서비스를 구현할 수있었습니다. HIPPA를 준수 해야하는 WCF를 만들고 있습니다.

응용 프로그램 풀에 ApplicationPoolidentity를 사용하는 경우 레지스트리 편집기의 "가상"사용자에 대한 권한을 지정하는 데 문제가있을 수 있습니다 (시스템에는 사용자가 없습니다).

그래서 사용하십시오 Subinacl - 설정 레지스트리 ACL 또는 이와 유사한 것을 가능하게하는 명령 줄 도구.

나는 단지 Sanity Check 답변을 추가하고 싶었습니다. 내 컴퓨터의 올바른 매장에 인증서를 설치하고 클라이언트에 대한 올바른 보안 권한이있는 후에도 동일한 오류가 발생했습니다. ClientCertificate와 서비스 인증서를 혼합 한 것으로 나타났습니다. 위의 모든 것을 시도한 경우, 두 개의 직선을 가지고 있는지 다시 확인합니다. 일단 그렇게하면 응용 프로그램이 웹 서비스를 성공적으로 호출했습니다. 다시 한 번, 사전 체커 일뿐입니다.

IIS7에서 OpenAM Fedlet을 사용하는 동안이 오류를 받았습니다.

기본 웹 사이트에 대한 사용자 계정을 변경하면 문제가 해결되었습니다. 이상적으로는 이것이 서비스 계정이되기를 원할 것입니다. 아마도 IUSR 계정조차도. IIS 경화를위한 방법을 찾는 것이 좋습니다.

인증서가 유출 된 주요 금고에 대해 인증하는 데 사용 된 후 서비스 패브릭 프로젝트에서 이것을 쳤습니다. 이 블록의 ApplicationManifest.xml 파일에서 ThumbPrint를 업데이트 했는데이 오류가 발생했기 때문에 다른 답변이 제안한 것을 정확하게 수행합니다. LocalMachine My Cert Store 위치에 액세스하십시오.

"x509findvalue"속성 값에 유의하십시오.

<!-- this block added to allow low priv processes (such as service fabric processes) that run as NETWORK SERVICE to read certificates from the store -->
  <Principals>
    <Users>
      <User Name="NetworkService" AccountType="NetworkService" />
    </Users>
  </Principals>
  <Policies>
    <SecurityAccessPolicies>
      <SecurityAccessPolicy ResourceRef="AzureKeyvaultClientCertificate" PrincipalRef="NetworkService" GrantRights="Full" ResourceType="Certificate" />
    </SecurityAccessPolicies>
  </Policies>
  <Certificates>
    <SecretsCertificate X509FindValue="[[THIS KEY ALSO NEEDS TO BE UPDATED]]" Name="AzureKeyvaultClientCertificate" />
  </Certificates>
  <!-- end block -->

I just reinstalled my certificate in local machine and then it is working fine

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top