在使用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
以上結果表示,目前使用的是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
如何檢視伺服器支援的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版本的操作進行設定,設定後重啟伺服器後即可。