HTTPS SSL/TLS問題及解決方法彙總

    之前處理過很多ThreadX平臺及安卓平臺上的SSL問題。

    SSL問題幾乎都和握手失敗有關,大致分爲四種:

1.客戶端沒有與服務器相匹配的加密套件,以及SSL版本不匹配。

2.SSL證書錯誤。

3.網絡鏈路問題。

4.其他問題。

    這時使用wireshark抓取網絡報文就顯得很重要了,下面列出的是使用PC模擬以上問題情況的報文:

正常報文:

PC端命令:openssl s_client -connect www.sogou.com:443

    通過https://myssl.com/,已經查到118.184.170.59不支持DES-CBC3-SHA (TLS_RSA_WITH_3DES_EDE_CBC_SHA) 加密套件,此網址可以快速知曉服務端支持的各種信息。

    

    

1.客戶端沒有與服務器相匹配的加密套件,或者SSL版本不匹配。

可以用火狐瀏覽器SSL版本查看與設置來模擬服務器是否支持某個版本TLS:

https://blog.csdn.net/weixin_30396699/article/details/98960323

或者用下面類似的openssl命令來模擬SSL連接,wireshark抓取網絡報文對比分析。

PC端命令:openssl s_client -cipher DES-CBC3-SHA -connect www.sogou.com:443

 

    

    上圖服務器的fatal警告很明顯表示客戶端的client hello報文有問題。

根據https://myssl.com/信息,對應加密套件不匹配。

解決方案:增加加密套件或更換版本。

 

2.SSL證書錯誤。

1)系統時間不對導致握手失敗。

解決方案:本地時間同步或者修正時間。

2)服務器證書有問題。

解決方案:客戶端可以不驗證服務器證書,需要注意安全問題。

3)證書驗證算法不支持。

解決方案:擴展相應的如SHA384摘要算法。

 

3.網絡鏈路問題。

    此種問題一般很好查,與服務端有很多重傳報文,且最後客戶端一直重傳,服務端沒有回覆,回覆包括RST、警告報文,超時之後斷開連接。

 

4.其他問題。

    前面幾種是比較好查的,下面是遇到的比較個例的問題:

 

1) 服務器僅支持HTTP2.0導致的問題:

    大家應該清楚ALPN,其實質上是TLS的擴展,爲了協商應用層協議,如HTTP2.0

之前是在android4.4平臺手機無法訪問亞馬遜的語音平臺。

首先無法握手成功,經過查看源碼,android4.4平臺,openssl爲1.0.1版本,雖然支持亞馬遜的加密套件,但是framework層沒有完全擴展加密套件。

故此修改方案無法完全生效:

    Android解決okhttpUtils框架無法在4.4.4以下系統訪問https協議的問題

    https://blog.csdn.net/weixin_30267253/article/details/72417399

    需在framework層添加所需加密套件的調用。此處略。

之後握手成功,但每次HTTP請求,服務器會直接RST,對比正常報文發現ALPN字段。

解決方案: 需升級平臺OpenSSL 1.0.2版本(支持ALPN)並升級支持HTTP2.0。

 

2)SNI不支持導致的握手失敗。

     Server Name Indication是 TLS 的擴展,用來解決一個服務器擁有多個域名的情況。

 PC端正常命令:openssl s_client -tls1_2 -connect  partner-listing.thredup.com:443 -servername partner-listing.thredup.com

 PC端模擬SNI不支持導致握手失敗命令:openssl s_client -tls1_2 -connect  partner-listing.thredup.com:443

    同正常訪問的client hello報文做對比

正常報文:

SNI不支持:

 

解決方案: 支持SNI。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章