IIS托管WCF服务以提供客户端证书

时间:2014-11-07 16:22:11

标签: java wcf iis ssl wildfly

我有2个需要来回通信的服务。 Service1是IIS 7.5中承载的WCF。 Service2是Wildfly中托管的Java。两种服务都需要客户端证书作为它们之间的双向(相互)SSL连接的一部分。两个服务使用的证书都是从同一个证书颁发机构生成的。

Service2(Java)能够毫无问题地调用Service1(WCF)。传递证书并在它们之间正确地传递消息。

Service1(WCF)无法调用Service2(Java)。在此交互中,WCF服务记录状态:“... SecurityNegotiationException:无法为具有权限的SSL / TLS建立安全通道”。 ---> System.Net.WebException:请求已中止:无法创建SSL / TLS安全通道。“

看看这个例外,它让我相信Service1(WCF)没有向Service2(Java)提供其客户端证书。我尝试通过添加<来向Service1(WCF)添加客户端证书。 clientCredentials>部分到Service1的行为,但我不确定这是否是在IIS中执行此操作的正确方法。

为了证明我的理论,我有一个自托管的WCF服务(不在IIS中运行),它与Service1(IIS中的WCF)在同一台机器上运行。使用相同的证书,我可以毫无问题地调用Service2(Java)。

是否有人知道如何在IIS 7.5中配置WCF服务以在其调用(提供给其他服务)时提供客户端证书?

BTW我已经尝试过为Service1(WCF)的“服务器”和“客户端”使用单独的证书。这并没有解决问题。

1 个答案:

答案 0 :(得分:0)

我最终将此问题跟踪到了cert权限的问题。

主要问题是MachineKeys文件夹未对新添加的密钥应用权限。当IIS服务尝试访问密钥时,这会导致权限被拒绝错误。奇怪的是,服务日志中没有显示任何错误,而是我不得不深入了解事件查看器以便最终找到它(我也不确定它是否总是在事件查看器中显示...但是&# 39;另一个故事)。

要正确设置MachineKeys文件夹的权限,请按照此MS KB文章中的步骤操作 http://msdn.microsoft.com/en-us/library/ee248638%28v=vs.100%29.aspx

另外,我发现这篇文章让我朝这个方向发展 http://blogs.msdn.com/b/kaushal/archive/2012/10/07/error-hresult-0x80070520-when-adding-ssl-binding-in-iis.aspx?Redirected=true