0

我很难找到以下情况的解决方案:

  • 我们有用 Java 创建的遗留 SOAP 服务,我们没有任何合理的方式来升级/修改。此旧服务可使用 https 端点访问,并且仅支持 TLS 1.0
  • 我们在注册表中配置了 SCHANNEL 以启用 tls 1.0
  • 我们确实在注册表中启用了强加密,但我想它不应该有害,因为它只会禁用 SSL3?
  • 我们能够使用网络浏览器正确地到达这个端点
  • 我们可以使用以下 powershell 脚本确认 TLS 1.0 已启用:
        $RetValue = New-Object psobject -Property @{
            Host = $HostName
            Port = $Port
            SSLv2 = $false
            SSLv3 = $false
            TLSv1_0 = $false
            TLSv1_1 = $false
            TLSv1_2 = $false
            KeyExhange = $null
            HashAlgorithm = $null
        }
        "ssl2", "ssl3", "tls", "tls11", "tls12" | %{
            $TcpClient = New-Object Net.Sockets.TcpClient
            $TcpClient.Connect($RetValue.Host, $RetValue.Port)
            $SslStream = New-Object Net.Security.SslStream $TcpClient.GetStream()
            $SslStream.ReadTimeout = 15000
            $SslStream.WriteTimeout = 15000
            try {
                $SslStream.AuthenticateAsClient($RetValue.Host,$null,$_,$false)
                $RetValue.KeyExhange = $SslStream.KeyExchangeAlgorithm
                $RetValue.HashAlgorithm = $SslStream.HashAlgorithm
                $status = $true
            } catch {
                $status = $false
            }
            switch ($_) {
                "ssl2" {$RetValue.SSLv2 = $status}
                "ssl3" {$RetValue.SSLv3 = $status}
                "tls" {$RetValue.TLSv1_0 = $status}
                "tls11" {$RetValue.TLSv1_1 = $status}
                "tls12" {$RetValue.TLSv1_2 = $status}
            }
        }

        $RetValue
        "From "+ $TcpClient.client.LocalEndPoint.address.IPAddressToString +" to $hostname "+ $TcpClient.client.RemoteEndPoint.address.IPAddressToString +':'+$TcpClient.client.RemoteEndPoint.port
        $SslStream | gm | ? {$_.MemberType -match 'Property'} | Select-Object Name | % {$_.Name +': '+ $sslStream.($_.name)}

但是,我们无法使用 .NET 4.6.1 WCF 客户端应用程序连接到此端点。当我们检查wireshark连接时发现,TLS 1.2执行了正确的握手协议(并且失败,这是意料之中的),但是TLS 1.0握手没有CLIENT HELLO。只有空的 TCP 连接和下一个 - 连接重置。

我们正在使用BasicHttpsBinding并强制使用 TLS 客户端:ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 ;

有人可以建议,我在代码或服务器配置中遗漏了什么可能会阻止 WCF 客户端启动此连接吗?

4

1 回答 1

0

好的,似乎答案很简单。代码一切正常,问题出在非常旧的 WebLogic 版本上,它不仅不支持高于 1.0 的 tls,而且 - 无法正确处理更高的 TLS 握手。唯一的解决方法是创建一个反向代理,它在更高的 TLS 上接收流量并仅在 TLS 1.0 上将其转发到目标 weblogic。

于 2019-08-08T10:52:19.780 回答