【发布时间】:2023-04-11 05:52:01
【问题描述】:
我的 WCF 服务尝试与 Java Web 服务通信时遇到了一点问题。
我有一个 ASP.Net MVC 前端,它通过 HTTP 与 WCF 服务通信。然后,WCF 服务使用证书的相互身份验证通过 HTTPS 与 JAVA Web 服务对话。当前的问题是,当 WCF 服务尝试调用 JAVA 后端时,我收到以下错误:
Could not establish secure channel for SSL/TLS
在 Java 方面,我正在运行 JBOSS,SSL3 和 TLS 密码仅用于 SSL。我在这方面的错误是:
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页面(也需要cert的认证),一切正常。我的证书很好且值得信赖。
然后我开始认为证书可能没有被放入服务调用中。所以我创建了一个控制台应用程序,它使用相同的证书调用 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
有人对从哪里开始有任何想法吗?
提前致谢, 尼克
[更新]
我现在在 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.
...但我不确定解决它。从这个外观来看,证书正在被提取。它只是无法获取密码。
【问题讨论】: