在使用Https(AS2、RosettaNet等协议)传输协议进行数据传输中,有时会遇到下面这些报错信息:
①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
这些报错,有时是因为数据传输双方设置的TLS版本不一致导致,所以如果出现上述报错我们可在确认网络正常的情况下,排除是否是TLS的问题,一般交易伙伴双方确认下彼此使用的TLS版本和Cipher Suites,然后不支持的一方进行设置即可。同时,我们可以通过网络抓包来确认客户端和服务器支持的TLS版本和Cipher Suites,参考如下:
以下截图表示客户端告知服务器, 客户端支持的TLS版本和Cipher Suites:
以下截图表示服务器端回复客户端,服务器支持的TLS版本和Cipher Suites:
如果确认是TLS版本和Cipher Suites不支持的问题,我们该如何查看知行之桥支持的TLS版本及TLS Cipher Suites,并进行修改或者设置呢?
如何查看服务器支持的TLS版本
1.可以借助一些测试工具,比如SSL Server Test:https://www.ssllabs.com/ssltest/
输入需要测试的服务器的IP或者域名即可
查看测试结果:
如上图表示,该服务器支持TLS 1.0、TLS 1.1、TLS1.2。
2.使用openssl命令
openssl s_client -connect <IP或域名>:<端口>
以上结果表示,目前使用的是TLS1.2版本。
如果确认是因为TLS版本不一致导致数据传输失败时,可以参考以下步骤针对客户端和服务器设置TLS版本:
设置TLS版本
作为客户端
以AS2协议为例,在知行之桥中创建AS2端口,前往高级设置页面“启用TLS功能”,勾选对应的TLS版本即可:
目前大多数客户使用的
都是TLS1.2版本,有些客户已经升级到TLS1.3版本。
作为服务器
如果EDI服务器系统是Windows系统
需要修改服务器的注册表来实现
1.点击“开始”,选择“运行”,在对话框中输入“regedit”,进入注册表编辑器中:
2.找到:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols选项,如下图:
3.确认这里没有你需要的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,参考如下:
注意,设置好后,需要重启服务器才可以生效。
如果EDI服务器是Linux系统
如果在Linux操作系统上部署的知行之桥,知行之桥是直接运行的其内置的Jetty Server(Jetty版本号:10.0.9)启动的,是默认支持到最新的TLS1.3的,可以通过以下命令确认使用的TLS版本:
openssl s_client -connect <IP或域名>:<端口> -debug | grep TLS
如何查看服务器支持的TLS Cipher Suites并修改
在EDI通信中有时也会因为双方使用的TLS Cipher Suites不同,导致数据传输失败。或者一方进行了升级,改用了更安全的Cipher Suites,要求另一方同步升级。那么如何确认你的服务器支持哪些TLS Cipher Suites并进行修改呢?
Windows服务器
1.Win+R快捷键,调出运行窗口,输入gpedit.msc回车
2.查看:Computer Configuration→Administrative Templates→Network → SSL Configuration Settings
3. 双击右侧的SSL Cipher Suite Order,会弹出SSL Cipher Suite Order设置框,选择Enabled,在左下侧可以看到支持的SSL Cipher Suite,全选复制出来,可以看到详细的列表:
在这里可以删除不安全的SSL Cipher Suite,添加安全的SSL Cipher Suite,进行应用。
Windows服务器可以在Microsoft官网查看操作系统支持的SSL Cipher Suite:https://learn.microsoft.com/en-us/windows/win32/secauthn/cipher-suites-in-schannel,如果是因为操作系统本来就不支持需要的SSL Cipher Suite,那就需要更换服务器或者重新安装系统了。
Linux服务器
查看知行之桥内置Jetty支持的SSL Cipher Suite命令
java -Dorg.eclipse.jetty.util.ssl.SslContextFactory.LEVEL=DEBUG -jar arc.jar
设置SSL Cipher Suite
在arc.xml中添加以下设置即可:
Q&A分享
Q:在运维工作中有些客户必须要使用https,但是有时在成功设置https后,浏览器无法访问https地址,报错如下:
A:这种情况常常就是因为服务器不支持TLS1.2及以上版本,参考上述设置TLS版本的操作进行设置,设置后重启服务器后即可。
更多 EDI 信息,请参阅: EDI 是什么?
阅读原文