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

时间:2012-03-30 14:34:02

标签: c# .net wcf iis x509certificate

我有客户端证书,但我无法获得作为发行人的公钥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以使其工作吗?

2 个答案:

答案 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;
}