VB.NET Web服务连接不可能:“无法创建SSL / TLS安全通道”

时间:2017-06-28 10:27:10

标签: vb.net web-services ssl

我正在尝试连接到服务器端用Java语言编写的Web服务。我的程序是在客户端用VB.NET 4.0编写的。

当我尝试从Web服务调用任何方法时,我收到以下错误消息:

  

WS-Metadata Exchange错误URI:[http://...]元数据包含无法解析的引用。请求已中止:无法创建SSL / TLS安全通道

我正在使用证书连接到Web服务,但问题似乎是我的主机(客户端)和服务器之间的通信级别。我正在使用的证书从未被检查为客户端,服务器甚至无法通信。

我试图将安全协议设置为“SSLv3”或“TLS12”,但它没有帮助。提前感谢您的任何建议。

另外我应该提一下,我设法使用Java类连接到此Web服务。似乎当客户端用Java编写时它可以工作,但是当它在VB.NET中时它不起作用。

P上。 HAB

已编辑:

我使用“Wireshark”来发现我的程序发送和接收的HTTPS数据包,这是我在传输的数据包中找到的:

客户要求:

Secure Sockets Layer
TLSv1 Record Layer: Handshake Protocol: Client Hello
    Content Type: Handshake (22)
    Version: TLS 1.0 (0x0301)
    Length: 140
    Handshake Protocol: Client Hello
        Handshake Type: Client Hello (1)
        Length: 136
      Version: TLS 1.0 (0x0301)
        Random
        Session ID Length: 0
        Cipher Suites Length: 24
        Cipher Suites (12 suites)
        Compression Methods Length: 1
        Compression Methods (1 method)
        Extensions Length: 71
        Extension: server_name
        Extension: elliptic_curves
        Extension: ec_point_formats
        Extension: Extended Master Secret
        Extension: renegotiation_info

来自服务器的响应:

Secure Sockets Layer
TLSv1 Record Layer: Alert (Level: Fatal, Description: Handshake Failure)
    Content Type: Alert (21)
    Version: TLS 1.0 (0x0301)
    Length: 2
    Alert Message
        Level: Fatal (2)
        Description: Handshake Failure (40)

我尝试将安全协议更改为不同版本的SSL / TLS,但它没有改变任何内容。我的客户端尝试发送带有标准值的“客户端问候”(未指定用户自定义参数),但服务器不接受它。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

找到解决方案:

问题实际上与Cipher套件有关,特别是 RC4 算法。实际上我的客户端是用VB.NET 4.0编写的,在这个版本的.NET中,在#34; Hello Client"中,.NET框架仍然支持并提议使用不推荐的RC4算法。 (握手)过程。

我的客户端在受支持的密码套件列表中唯一存在的RC4密码套件正在使服务器中止连接,并显示以下错误消息:"请求已中止:无法创建SSL / TLS安全通道"

所以我必须通过使用regedit.exe进入系统注册表来停用客户端计算机上的RC4密码套件,并将以下密钥添加到这两个指定的路径中:

  

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft.NETFramework \ v4.0.30319   " SchUseStrongCrypto" = DWORD:00000001

并且

  

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft.NETFramework \ v4.0.30319   " SchUseStrongCrypto" = DWORD:00000001

重新启动客户端计算机后,我能够成功连接到Web服务。

有关已弃用的RC4算法的更多信息:

https://technet.microsoft.com/en-us/library/security/2960358.aspx

=>此外,您应该注意到此问题仅存在于.NET 4.0-4.5中。从版本4.6及以上版本开始工作正常。