C# 如何使用缺少CA的客户端证书与外部Web服务通信?

C# 如何使用缺少CA的客户端证书与外部Web服务通信?,c#,.net,wcf,iis,x509certificate,C#,.net,Wcf,Iis,X509certificate,我有一个客户端证书,但我无法获得作为颁发者的公钥CA。在证书MMC中查看时,Windows无法验证颁发者。我需要与需要证书的外部java web服务通信 我创建了一个示例控制台应用程序,该应用程序通过绑定使用了证书,它工作得非常好。我现在将该配置和代码移动到一个IIS托管的WCF web服务中。我遇到了一个障碍,因为我似乎无法克服错误: 无法为具有权限“[url]”的SSL/TLS安全通道建立信任关系。 这两个应用程序之间的唯一区别似乎在于它正在运行的域。我确信问题在于验证客户端证书,而不是试图

我有一个客户端证书,但我无法获得作为颁发者的公钥CA。在证书MMC中查看时,Windows无法验证颁发者。我需要与需要证书的外部java web服务通信

我创建了一个示例控制台应用程序,该应用程序通过绑定使用了证书,它工作得非常好。我现在将该配置和代码移动到一个IIS托管的WCF web服务中。我遇到了一个障碍,因为我似乎无法克服错误:

无法为具有权限“[url]”的SSL/TLS安全通道建立信任关系。

这两个应用程序之间的唯一区别似乎在于它正在运行的域。我确信问题在于验证客户端证书,而不是试图与外部java服务建立连接。什么是最好的解决办法,因为我已经要求公开密钥CA,但被拒绝了


我可以在WCF或tweak IIS中覆盖验证以使其正常工作吗?

您可以通过向添加回调来覆盖检查。最简单的回调是

static void Main()
{
    ServicePointManager.ServerCertificateValidationCallback = ValidateRemoteCertificate;

    // ...
    Application.Run(new MyForm());
}

private static bool ValidateRemoteCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    return true;
}

您可以通过向添加回调来覆盖检查。最简单的回调是

static void Main()
{
    ServicePointManager.ServerCertificateValidationCallback = ValidateRemoteCertificate;

    // ...
    Application.Run(new MyForm());
}

private static bool ValidateRemoteCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    return true;
}

在把头撞在墙上,搜索堆栈跟踪关键字之后,我发现了一篇关于私钥证书文件和IIS需要访问此文件的帖子

我在中设置了证书文件的读取权限:

C:\Documents and Settings\all users\Application Data\Microsoft\Crypto\RSA\MachineKeys

这就解决了我的问题

在把头撞到墙上并搜索堆栈跟踪关键字后,我发现了一篇关于私钥证书文件和IIS需要访问此文件的帖子

我在中设置了证书文件的读取权限:

C:\Documents and Settings\all users\Application Data\Microsoft\Crypto\RSA\MachineKeys

这就解决了我的问题

我试过了,但没有用,我想你的解决方案可以解决我连接的服务的服务器证书问题。我认为我的问题在于客户端证书和IIS在允许连接之前试图验证它。我尝试了这种方法但没有效果,我认为您的解决方案可以解决我连接到的服务的服务器证书的问题。我认为我的问题在于客户端证书和IIS在允许连接之前试图验证它。