IIS - WCF 4.0调用Java(无法为SSL / TLS建立安全通道)

时间:2011-12-20 11:19:07

标签: wcf ssl iis-7

我正在尝试与Java Web服务通信的WCF服务遇到一些问题。

我有一个ASP.Net MVC前端,它通过HTTP与WCF服务进行通信。然后,WCF服务使用证书的相互身份验证通过HTTPS与JAVA Web服务进行通信。目前的问题是,当WCF服务尝试调用JAVA后端时,我收到以下错误:

Could not establish secure channel for SSL/TLS

在Java方面,我正在运行JBOSS,仅针对SSL使用SSL3和TLS密码。我在这方面的错误是:

21:49:48,701 INFO  [STDOUT] http-0.0.0.0-8543-2, WRITE: TLSv1 Handshake, length = 1514
21:49:49,499 INFO  [STDOUT] http-0.0.0.0-8543-2, received EOFException: error
21:49:49,499 INFO  [STDOUT] http-0.0.0.0-8543-2, handling exception:   javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
21:49:49,507 INFO  [STDOUT] http-0.0.0.0-8543-2, SEND TLSv1 ALERT:  fatal, description = handshake_failure
21:49:49,507 INFO  [STDOUT] http-0.0.0.0-8543-2, WRITE: TLSv1 Alert, length = 2
21:49:49,507 INFO  [STDOUT] http-0.0.0.0-8543-2, called closeSocket()
21:49:49,508 INFO  [STDOUT] http-0.0.0.0-8543-2, called close()

由于我正在使用证书的相互身份验证,我的第一个停靠端口是错误的证书。所以我打开了服务wsdl页面(也需要认证证书),一切正常。我的证书很好并且值得信赖。

然后我开始考虑可能是证书没有投入服务电话。所以我创建了一个控制台应用程序,它使用相同的certifcate调用Java服务(通过配置文件中的端点行为查找)。瞧,这项工作正常,服务响应数据显示在屏幕上。

这让我觉得IIS中有一些东西阻止了SSL通道被打开,这就是我真正需要帮助的地方。

我的IIS是在Windows Server 2008 R2上运行的7.0版。该服务在.Net 4上运行。 (我应该指出的一件事是我的应用程序运行.Net v3.5而不是v4。)

我在SCHANNEL设置中涉及了一些,但是不知道应该启用哪些设置,哪些应该被禁用。 目前我有:

TLS 1.0/Server/Enabled = 1
SSL 3.0/Server/Enabled = 1
SSL 2.0/Server/Enabled = 1
PCT 1.0/Server/Enabled = 1

我也有:

SSL 2.0/Client/DisabledByDefault = 0

有没有人对从哪里开始有任何想法?

提前致谢, 尼克

[UPDATE]

现在在Windows错误日志中出现以下错误:

A fatal error occurred when attempting to access the SSL client credential private key. 
The error code returned from the cryptographic module is 0x8009030d.
The internal error state is 10003.

......但我不确定是否解决了。看起来这个证书正好被证实了。它只是无法获得密码。

1 个答案:

答案 0 :(得分:1)

<强> [回答]

事实证明,我的IIS_IUSRS帐户尚未设置证书的权限。

当我设置它们时,一切正常。