TLS版本及CipherSuites確認及設定
在使用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
Q&A分享
Q:在運維工作中有些客戶必須要使用https,但是有時在成功設定https後,瀏覽器無法訪問https地址,報錯如下:
A:這種情況常常就是因為伺服器不支援TLS1.2及以上版本,參考上述設定TLS版本的操作進行設定,設定後重啟伺服器後即可。
更多 EDI 資訊,請參閱: EDI 是什麼?