콘솔 응용 프로그램에서 인증 용 클라이언트 인증서가 필요한 WCF 서비스를 호출하고 있습니다. 관리자로 실행되는 Visual Studio 2010에서 디버그 모드로 콘솔 응용 프로그램을 실행하면 응용 프로그램이 내 컴퓨터에 클라이언트 인증서로 설치된 X509 인증서를 표시 할 수 없지만 동일한 프로그램이 Visual Studio (관리자로 실행되지 않음) , 응용 프로그램이 잘 작동하며 WCF 서비스에 클라이언트 인증서를 제공 할 수 있으며 WCF 서비스에서도 데이터를 반환합니다.관리자 모드에서 프로세스를 실행할 때 X509Certificate 개인 키 문제
클라이언트 인증서와 서버 인증서는 모두 회사의 내부 CA에서 발급합니다. Windows 7에서 실행 중이며 .Net 4.0을 사용 중입니다.
Visual Studio 추가 기능에서 상호 SSL을 사용하여 동일한 WCF 서비스를 호출 할 때 동일한 문제가 발생합니다. 내 VS 관리 모드에서 실행중인 경우 WCF 서비스 호출이 실패하지만 그렇지 않으면 제대로 작동합니다.
작업 관리자에서 VS 프로세스를 볼 때 (관리자와 비 관리자 모두) 프로세스 사용자를 내 ID로 표시하므로 어떤 인증서 액세스 문제도 될 수 없으므로 혼동하지 않습니다. .
조언이나 도움이 도움이 될 것입니다. 코드 조각 :
private static void MutualSslServiceCall()
{
var testClient = new LocalService.Service1Client("MutualSsl");
testClient.ClientCredentials.ClientCertificate.Certificate = GetClientCertificate();
var response = testClient.GetData(3232);
Console.WriteLine("Done, Resposne = {0}", response);
Console.ReadLine();
}
// gets the certificate from the workstation certificate store.
private static X509Certificate2 GetClientCertificate()
{
X509Certificate2 certificate = null;
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
try
{
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly|);
// Nothing to do if no cert found.
if (store.Certificates != null && store.Certificates.Count > 0)
{
if (store.Certificates.Count == 1)
{
// Return the certificate present.
certificate = store.Certificates[0];
}
else
{
// Request the user to select a certificate
var certificates = X509Certificate2UI.SelectFromCollection(store.Certificates, "Digital Certificates", "Select a certificate from the following list:", X509SelectionFlag.SingleSelection);
// Check if one has been returned
if (certificates != null && certificates.Count > 0)
{
certificate = certificates[0];
}
}
}
}
finally
{
store.Close();
}
return certificate;
}
오류 : { "권한 XXXX와 SSL/TLS에 대한 보안 채널을 설정할 수 없습니다."}
의 InnerException : { "요청이 중단되었습니다 : SSL을 만들 수 없습니다/TLS 보안 채널. "}
덕분에,
rauts
오류 메시지뿐 아니라 인증서를 할당하는 코드 스 니펫을 공유 하시겠습니까? –
안녕하세요 .. 적어도 인증서를로드 할 수 있습니까? 나는 인증서 = 인증서 [0]을 의미한다. 그것에 인증서가 있습니까? – Shetty
예 ... 인증서 컬렉션에 인증서를로드 할 수 있지만 사용하려고 할 때 개인 키가 필요하며 실패 할 때입니다. – rauts