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版本及CipherSuites確認及設定

以下截圖表示伺服器端回覆客戶端,伺服器支援的TLS版本和Cipher Suites:

TLS版本及CipherSuites確認及設定

如果確認是TLS版本和Cipher Suites不支援的問題,我們該如何檢視知行之橋支援的TLS版本及TLS Cipher Suites,並進行修改或者設定呢?

如何檢視伺服器支援的TLS版本

1。可以藉助一些測試工具,比如SSL Server Test:https://www。ssllabs。com/ssltest/

輸入需要測試的伺服器的IP或者域名即可

TLS版本及CipherSuites確認及設定

檢視測試結果:

TLS版本及CipherSuites確認及設定

如上圖表示,該伺服器支援TLS 1。0、TLS 1。1、TLS1。2。

2。使用openssl命令

openssl s_client -connect :<埠>

TLS版本及CipherSuites確認及設定

TLS版本及CipherSuites確認及設定

以上結果表示,目前使用的是TLS1。2版本。

如果確認是因為TLS版本不一致導致資料傳輸失敗時,可以參考以下步驟針對客戶端和伺服器設定TLS版本:

設定TLS版本

作為客戶端

以AS2協議為例,在知行之橋中建立AS2埠,前往高階設定頁面“啟用TLS功能”,勾選對應的TLS版本即可:

TLS版本及CipherSuites確認及設定

目前大多數客戶使用的都是TLS1。2版本,有些客戶已經升級到TLS1。3版本。

作為伺服器

如果EDI伺服器系統是Windows系統

需要修改伺服器的登錄檔來實現

1。點選“開始”,選擇“執行”,在對話方塊中輸入“regedit”,進入登錄檔編輯器中:

TLS版本及CipherSuites確認及設定

2。找到:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols選項,如下圖:

TLS版本及CipherSuites確認及設定

3。確認這裡沒有你需要的TLS版本,比如TLS1。2,右擊-新建(New)->項(Key)->新建名為TLS 1。2的項(注意TLS與1。2之間有個空格),如下圖:

TLS版本及CipherSuites確認及設定

在新建的TLS 1。2項上右擊->新建->項->新建Server, Client兩個項,如下圖:

TLS版本及CipherSuites確認及設定

在新建的Server和Client中都新建DWORD 32位值,如下圖:

TLS版本及CipherSuites確認及設定

新增兩個DWORD 32位值,名稱分別為DisabledByDefault和 Enabled ,參考如下:

TLS版本及CipherSuites確認及設定

其中DisabledByDefault的值為0,Enabled的值為1,參考如下:

TLS版本及CipherSuites確認及設定

TLS版本及CipherSuites確認及設定

注意,設定好後,需要重啟伺服器才可以生效。

如果EDI伺服器是Linux系統

如果在Linux作業系統上部署的知行之橋,知行之橋是直接執行的其內建的Jetty Server(Jetty版本號:10。0。9)啟動的,是預設支援到最新的TLS1。3的,可以透過以下命令確認使用的TLS版本:

openssl s_client -connect :<埠> -debug | grep TLS

TLS版本及CipherSuites確認及設定

如何檢視伺服器支援的TLS Cipher Suites並修改

在EDI通訊中有時也會因為雙方使用的TLS Cipher Suites不同,導致資料傳輸失敗。或者一方進行了升級,改用了更安全的Cipher Suites,要求另一方同步升級。那麼如何確認你的伺服器支援哪些TLS Cipher Suites並進行修改呢?

Windows伺服器

1。Win+R快捷鍵,調出執行視窗,輸入gpedit。msc回車

TLS版本及CipherSuites確認及設定

2。檢視:Computer Configuration→Administrative Templates→Network → SSL Configuration Settings

TLS版本及CipherSuites確認及設定

3。 雙擊右側的SSL Cipher Suite Order,會彈出SSL Cipher Suite Order設定框,選擇Enabled,在左下側可以看到支援的SSL Cipher Suite,全選複製出來,可以看到詳細的列表:

TLS版本及CipherSuites確認及設定

在這裡可以刪除不安全的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

TLS版本及CipherSuites確認及設定

設定SSL Cipher Suite

在arc。xml中新增以下設定即可:

TLS版本及CipherSuites確認及設定

Q&A分享

Q:在運維工作中有些客戶必須要使用https,但是有時在成功設定https後,瀏覽器無法訪問https地址,報錯如下:

TLS版本及CipherSuites確認及設定

A:這種情況常常就是因為伺服器不支援TLS1。2及以上版本,參考上述設定TLS版本的操作進行設定,設定後重啟伺服器後即可。