使用SOAP UI連接配接ADFS,以WS-Trust的方式擷取Request Security Token,ADFS必須使用SSL(HTTPS)方式連接配接,結果通路失敗,SOAP UI報no response, 異常為connection reset。
ADFS的EventViewer有以下記錄:
A fatal alert was generated and sent to the remote endpoint. This may result in termination of the connection. The TLS protocol defined fatal error code is 20. The Windows SChannel error state is 960.
然而用其他Rest Client如PostMan 就沒有類似問題。
Google了一下也沒什麼結果,都說是SSL版本/算法使用的問題,然而我用的是JDK8,TLS 1.1和1.2預設都enable了.同時Enable了-Djavax.net.debug=SSL發現在SSL/TSL握手期間出現問題,但是也沒有具體的結論。期間惡補了下TLS握手流程:
[url=http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html]阮一峰的SSL/TLS協定運作機制[/url]
基本确定問題應該出在SOAP UI這裡。
偶然在一個讨論SOAP UI的SSL相關的文章裡面發現一個回複:
[url]https://community.smartbear.com/t5/SoapUI-Open-Source/How-to-enable-TLS-1-2-in-SoapUI/m-p/125822#M21605[/url]
然後就去SOAP UI的Github去檢視了一下有沒有解決SSL相關的問題,沒想到真的找到了:
[url]https://github.com/SmartBear/soapui/commit/5f1fa78417cba12e36584824533e5db62ee02a19[/url]
SOAP 5.2.1已經釋出了一年多了,最近一直沒有釋出新版本,上面的這個修複的叫做SNI的支援,隻要在SSLSocketImpl裡面設定一下HOST就可以了。
SNI主要是為了解決單個IP上有多個虛拟的HTTPS HOST問題,這個可以去擴充閱讀
[url]https://en.wikipedia.org/wiki/Server_Name_Indication[/url]