2012-05-31 1 views
0

연결할 인증서가 필요한 웹 서비스에 연결하기 위해 서비스 사용자 계정을 가장합니다. 그러나 코드를 실행하는 컴퓨터에서 서비스 계정에 클라이언트 인증서를 설치했는데 System.Security.Cryptography.CryptographicException 오류가 발생합니다. 지정한 파일을 찾을 수 없습니다.가장 된 사용자 키 저장소 액세스

using (var ctx = new ImpersonationContext("svcAcctUserName", "domain", "password")) 
{ 
    var clientCert = new X509Certificate2("filePath", "certPassword"); 
} 

도용 코드는 간결 나는 그것을 밖으로 떠난하지만 내 상황은 내가 svcAcctUserName로 실행하고 있음을 보여줍니다 Environment.UserName을 로그인하여 svcAcctUserName 사용자로 전환되어 있는지 확인하십시오, 작동합니다. filePath는 정확합니다. 다시 말하지만 X509Certificate2 객체를 생성하기 전에 파일을 열고 닫아 파일에 대한 액세스 권한과 경로가 올바른지 확인합니다.

경로를 매개 변수로 제공하고 코드를 실행하는 사용자가 액세스 권한을 갖고 있기 때문에 오류가 혼동 스럽습니다.

편집 :

는 또한이 작업을 수행하려고은 : How to call a Web service by using a client certificate for authentication in an ASP.NET Web application

내가 asp.net 응용 프로그램을 사용하고 있지 않다하더라도, 나는 그것이 어쨌든 시도했다. 인증서 추가 기능을 mmc에 추가하고 "로컬 컴퓨터"인증서를 추가 한 다음 인증서를 로컬 컴퓨터의 개인 저장소로 가져 왔습니다.

나는 다음 실행 :

WinHttpCertCfg.exe -g -c LOCAL_MACHINE\My -s issuedToName -a domain\svcAcctUserName 

이 같은 문제를, 작업을 다시 실행 시도 여전히.

무엇이 누락 되었습니까?

+0

어떻게 웹 서비스에 액세스하고 있습니까? 인증서가 키 저장소에 설치되어 있습니까? 아니면 파일 시스템에 있습니까? – Brian

+0

가장 된 서비스 계정의 개인 키 저장소와 가장 된 사용자를 통해 액세스 할 수있는 권한이있는 local_machines 키 저장소에 있습니다. 내가 시도한 것을 아래에서보십시오. – Bitfiddler

+0

샘플 파일 경로를 사용하는 X509Certificate2의 생성자에 대한 호출을 보여줍니다.하지만 저장소의 인증서에 대해 이야기하고 있습니다 ... 동일한 문제에 대해 이야기하기 위해 질문과 샘플 코드를 정렬하십시오. –

답변

1

Alex는 지적했듯이 Windows의 인증서 시스템의 기본 아키텍처를 이해하지 못합니다. 그러나 위의 단계를 수행하고 X509Store를 사용하도록 코드를 수정 한 후에는 작동합니다. 잘하면이 도움이 될 것입니다 :

using (var ctx = new ImpersonationContext("svcAcctUserName", "domain", "password")) 
{ 
    var store = new X509Store(StoreLocation.LocalMachine); 
    store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); 
    var clientCert = store.Certificates.Find(X509FindType.FindByIssuerName, "IssuerNameHere", false); 
    var clientCert2 = new X509Certificate2(clientCert[0]); 
} 
+0

+1 솔루션을 올리는 데 +1 (받아 들일 수 있도록 - 괜찮습니다.) 참고 사항 : 원래 질문의 크기에 대한 제한 (의견이 아님)이 있으므로 수정 사항을 질문하십시오. 평판이 좋더라도 자유롭게 질문을 수정할 수 있습니다. 코멘트에 코드를 넣는 것이 훨씬 더 나빴을 것입니다 ... 이전 코멘트를 사용하여 자신의 질문에 "대답"하면 많은 사람들이 "대답 한"질문을 건너 뛰어 대답을 얻을 기회가 줄어 들었습니다. –

+0

불행히도 다른 2 일 동안 내 답변을 수락 할 수 없습니다. 그러나 사람들이 의견에 대한 응답으로 원래의 질문을 계속 편집 할 때 나중에 솔루션의 흐름을 따르려고하는 사람들에게 따르기가 어렵다는 것을 알았습니다.나는 사람들이 어떻게 솔루션에 도달했는지 알고 싶어하지만, 여러 번 여행은 대답만큼 유익한 것이지만, 의견에 대한 응답으로 5 번 편집 된 질문이있을 때 일어난 일의 순서를 역 설계하기가 어렵습니다. – Bitfiddler

+0

또한 포인트 시스템에 전혀 신경 쓰지 않아 누군가 내 대답을 올바르게 표시하지 않을 경우 특히 걱정하지 않습니다. 내 솔루션을 읽으면 누군가를 도울 수 있습니다. 신용 한도에 상관없이 (신용은 환영하지만). – Bitfiddler

관련 문제