问题
当我们调用api时,我们有时会遇到下面这些报错信息:
276–Error during handshake:接收到的消息异常,或格式不正确。
13003:Connot conclude ssl handshake.Cause:Connection reset.
533 – An MDN was expected in the HTTP reply,but was not returned.
32000 – Remote host disconnected during SSL negotiation.
286:Unable to execute work queue.: Received fatal alert: HANDSHAKE_FAILURE
Could not create SSL/TLS secure channel
原因分析
这些报错,有时是因为数据传输双方设置的TLS版本不一致导致,所以如果出现上述报错我们可在确认网络正常的情况下,排除是否是TLS的问题,一般交易伙伴双方确认下彼此使用的TLS版本和Cipher Suites,然后不支持的一方进行设置即可。同时,我们可以通过网络抓包来确认客户端和服务器支持的TLS版本和Cipher Suites.
关于加密套件
加密套件是指在SSL通信中,服务器和客户端所使用的加密算法的组合。在SSL握手初期,客户端将自身支持的加密套件列表发送给服务器;在握手阶段,服务器根据自己的配置从中尽可能的选出一个套件,作为之后所要使用的加密方式。
每种加密套件中支持的加密算法大多包含了如下信息:
密钥交换算法:用于决定客户端与服务器之间在握手的过程中如何认证。使用非对称加密算法来生成会话密钥,因为非对称算法不会将重要数据在通信中传输。用到的算法包括RSA、Diffie-Hellman和ECDHE。
签名算法:用于CA证书签名。用到的算法包括RSA和DSS。
加密算法:用于对数据进行加密传输。一般有对称加和非对称加密,但是非对称加密算法太耗性能,再者有些非对称加密算法有内容长度的限制,所以真正要传输的数据会使用对称加密来进行加密。算法名称后通常带密钥的长度和加密模式(GCM和CBC)。用到的算法包括:AES_128、AES_256、AES_128_CBC、AES_256_CBC、AES_128_GCM、AES_256_GCM和ChaCha20-Poly1305。
完整性校验算法:用于校验消息的完整性。用到的算法包括SHA、SHA256和SHA384。
例如加密套件中支持的加密算法tls12_ck_rsa_aes_128_cbc_sha,此算法是基于TLS协议,使用的密钥交换算法为RSA,加密算法为AES_128_CBC(密钥长度为128
确认TLS版本和Cipher Suites
以下截图表示客户端告知服务器, 客户端支持的TLS版本和Cipher Suites (加密套件):
以下截图表示服务器端回复客户端,服务器支持的TLS版本和Cipher Suites:
可以参考下面的表格来确定Cipher Suites 和其支持的TLS 协议版本
表格来源: https://learn.microsoft.com/en-us/windows/win32/secauthn/tls-cipher-suites-in-windows-10-v1511
设置TLS版本
第一步, 点击“开始”,选择“运行”,在对话框中输入“regedit”,进入注册表编辑器中:
第二步, 找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
选项,如下图:
第三步, 确认这里没有你需要的TLS版本,比如TLS1.2,右击-新建(New)->项(Key)->新建名为TLS 1.2的项(注意TLS与1.2之间有个空格),如下图:
在新建的TLS 1.2项上右击->新建->项->新建Server, Client两个项,如下图:
在新建的Server和Client中都新建DWORD 32位值,如下图:
添加两个DWORD 32位值,名称分别为DisabledByDefault和 Enabled ,参考如下:
其中DisabledByDefault的值为0,Enabled的值为1,参考如下:
注意,设置好后,需要重启服务器才可以生效。
参考文档
https://thesecmaster.com/blog/how-to-disable-tls-1-0-and-tls-1-1-on-windows-server
https://www.kasoftware.com/kb/2022/12/02/tls-and-ciphersuites.html
https://learn.microsoft.com/en-us/windows/win32/secauthn/tls-cipher-suites-in-windows-10-v1511
https://support.huawei.com/enterprise/zh/doc/EDOC1100290925/5eb1a375
评论区