我有客户端证书,但我无法获得作为发行人的公钥CA.当我在证书MMC中查看它时,Windows无法验证颁发者。我需要与需要证书的外部Java Web服务进行通信。
我创建了一个示例控制台应用程序,通过绑定使用证书,它完美地运行。我现在将该配置和代码移动到IIS托管的WCF Web服务中。我遇到了一个障碍,我似乎无法克服错误:
Could not establish trust relationship for the SSL/TLS secure channel with authority '[url]'
两个应用程序之间的唯一区别似乎是它正在运行的域中。我确信问题在于验证我身边的客户端证书,而不是尝试与外部Java服务建立连接。最好的方法是什么,因为我已经要求公钥CA,只是被拒绝了?
我可以覆盖WCF中的验证或调整IIS以使其工作吗?
答案 0 :(得分:1)
在将我的头撞到墙上并搜索堆栈跟踪关键字之后,我遇到了一篇关于私钥证书文件和IIS需要访问它的帖子。
我在:
中为证书文件设置了读取权限C:\Documents and Settings\all users\Application Data\Microsoft\Crypto\RSA\MachineKeys
这解决了我的问题。
答案 1 :(得分:0)
您可以通过向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;
}