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

本文关键字:外部 Web 服务 通信 证书 客户端 何使用 CA | 更新日期: 2023-09-27 18:29:28

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

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

Could not establish trust relationship for the SSL/TLS secure channel with authority '[url]'

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

我可以覆盖WCF中的验证或调整IIS以使其工作吗?

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

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

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

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

这解决了我的问题。

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

static void Main()
{
    ServicePointManager.ServerCertificateValidationCallback = ValidateRemoteCertificate;
    // ...
    Application.Run(new MyForm());
}
private static bool ValidateRemoteCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
    return true;
}