如何使用缺少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以使其工作吗?
在用头撞墙并搜索堆栈跟踪关键字后,我发现了一篇关于私钥证书文件和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;
}