日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

搞定客户端证书错误,看这篇就够了

發(fā)布時(shí)間:2024/8/23 编程问答 79 豆豆
生活随笔 收集整理的這篇文章主要介紹了 搞定客户端证书错误,看这篇就够了 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡(jiǎn)介:?TLS/SSL 握手失敗引起的連接異常問題怎么搞?阿里云 SRE 工程師手把手帶你排查解決。

1.TLS/SSL 握手基本流程


*圖片來源于網(wǎng)絡(luò)

2.案例分享

2.1CFCA 證書的歷史問題

2.1.1背景

某客戶為其生產(chǎn)環(huán)境的站點(diǎn)申請(qǐng)了一張由 CFCA 簽發(fā)的證書。相關(guān)域名正確配置該證書且啟用 HTTPS 后,經(jīng)測(cè)試發(fā)現(xiàn)他們的客戶端 App 在低版本手機(jī)上( iOS < 10.0,Android < 6.0)無法連接到相關(guān)站點(diǎn)。

客戶端調(diào)試發(fā)現(xiàn),控制臺(tái)會(huì)看到證書無效的錯(cuò)誤信息(Invalid Certificate 或 Certificate Unknown )。

2.1.2排查

起初,工程師并不知道客戶的證書是由哪個(gè)機(jī)構(gòu)簽發(fā)以及有什么問題。而對(duì)于這類問題,一般均需要客戶端網(wǎng)絡(luò)包做進(jìn)一步的分析與判斷。因此安排客戶在受影響的設(shè)備上進(jìn)行問題復(fù)現(xiàn)及客戶端抓包操作。

獲取到網(wǎng)絡(luò)包后,首先確認(rèn)了客戶端連接失敗的直接原因?yàn)?TLS 握手過程異常終止,見下:

查看 Encrypted Alert 內(nèi)容,錯(cuò)誤信息為 0x02 0x2E。根據(jù) TLS 1.2 協(xié)議(RFC5246 )的定義, 該錯(cuò)誤為因?yàn)?certificate_unknown。

繼續(xù)查看該證書的具體信息,根據(jù) Server Hello 幀中攜帶的證書信息得知該證書由證書機(jī)構(gòu) China Financial Certification Authority(CFCA) 簽發(fā)。再根據(jù)證書信息中的 Authority Information Access (AIA) 信息確認(rèn) Intermediate CA 和 Root CA 證書。確認(rèn)該證書簽發(fā)機(jī)構(gòu)的根證書為 CFCA EV ROOT。

回到存在問題的手機(jī)設(shè)備上(Android 5.1),檢查系統(tǒng)內(nèi)置的受信任 CA 根證書列表,未能找到 CFCA EV ROOT CA 證書;而在正常連接的手機(jī)上,可以找到該 CA 的根證書并默認(rèn)設(shè)置為”信任“。

查閱 CFCA 證書的相關(guān)說明,該機(jī)構(gòu)的證書在 iOS 10.1 及 Android 6.0 及以上版本才完成入根接入。

*參考:https://www.cfca.com.cn/upload/20161101.pdf

2.1.3小結(jié)

從上面的分析可以看到,該問題的根因是低版本客戶端設(shè)備沒有內(nèi)置 CFCA 的 CA 根證書。因此,基本的解決方案包括:

  • 更換其他 CA 機(jī)構(gòu)簽發(fā)的證書,保證其 CA 根證書的在特定設(shè)備上已默認(rèn)信任。
  • 手動(dòng)在受影響的設(shè)備上安裝該 CA 根證書及中間證書,并配置為信任狀態(tài)。
  • 客戶端 App 預(yù)置該 CA 根證書,并通過客戶端代碼配置信任該證書。
  • 需要結(jié)合不同的業(yè)務(wù)場(chǎng)景選擇合理解決方案。

    2.2證書鏈信任模式引起的問題

    2.2.1背景

    某客戶新增了一個(gè)容災(zāi)備用接入地址,啟用了一個(gè)新的域名并配置了一張全新的證書。測(cè)試發(fā)現(xiàn),切換到該備用地址時(shí),Android 客戶端無法正常連接,報(bào)證書未知錯(cuò)誤(Certificate Unknown);iOS 客戶端表現(xiàn)正常。

    2.2.2排查

    和 2.1 的問題類似,首先在受影響的設(shè)備上進(jìn)行問題復(fù)現(xiàn)及客戶端抓包操作。

    獲取到網(wǎng)絡(luò)包之后,確認(rèn)了客戶端連接失敗的直接原因?yàn)?TLS 握手過程異常終止,原因與 2.1 中的問題一樣,為Certificate Unknown :

    類似問題 2.1 的排查動(dòng)作,查看該證書的 CA 根證書及根證書的信任情況。

    發(fā)現(xiàn)該證書由中間 CA 機(jī)構(gòu) Secure Site Pro CA G2 簽發(fā),其根 CA 為 DigiCert Global Root CA:

    DigiCert Global Root CA 作為一個(gè)廣泛支持的證書簽發(fā)機(jī)構(gòu),其根 CA 證書在絕大多數(shù)的設(shè)備上均為受信任狀態(tài),這一點(diǎn)在受影響的設(shè)備上也得到了確認(rèn)。既然根 CA 的證書處于信任狀態(tài),為何證書驗(yàn)證還是失敗?這成為下一步排查的重點(diǎn)方向。

    同一臺(tái)設(shè)備,切換到正常環(huán)境下,也完成一次抓包操作。獲取到新的網(wǎng)絡(luò)包后做對(duì)比分析,發(fā)現(xiàn)兩種情況下網(wǎng)絡(luò)包中體現(xiàn)的區(qū)別為:

    正常環(huán)境下,服務(wù)器返回的證書包含了完整的 CA 證書鏈;

    異常情況下,服務(wù)端返回的證書僅包含葉節(jié)點(diǎn) CA 證書。

    根據(jù)上述線索進(jìn)行排查研究,發(fā)現(xiàn):不同于其他平臺(tái),Android 客戶端默認(rèn)是不會(huì)通過 AIA Extension 去做證書鏈的校驗(yàn)。

    *參考:https://tools.ietf.org/html/rfc3280#section-4.2.2.1?;https://developer.android.com/training/articles/security-ssl#UnknownCa

    因此,當(dāng)中間 CA 證書未安裝或未緩存時(shí),客戶端 App 是不會(huì)主動(dòng)拉取中間 CA 證書并做進(jìn)一步信任鏈校驗(yàn)的,從而導(dǎo)致證書校驗(yàn)失敗。

    2.2.3小結(jié)

    從上面的排查分析看到,該問題和 Android 平臺(tái)自身的證書校驗(yàn)機(jī)制和證書打包方式相關(guān)。解決方案包括:

    代碼層面手動(dòng)定制 TrustManager 去定制校驗(yàn)過程;

    或重新打包證書,將中間 CA 證書和根 CA 證書一同打包到服務(wù)端證書中。

    該客戶綜合開發(fā)成本與環(huán)境現(xiàn)狀,選擇重新打包證書。新的證書配置完成后,問題得到解決。

    2.3加密套件協(xié)商引起的問題

    2.3.1背景

    某客戶反饋他們的 iOS 客戶端 App 用戶在特定運(yùn)營(yíng)商網(wǎng)絡(luò)環(huán)境下無法打開特定的業(yè)務(wù)站點(diǎn)(HTTPS 站點(diǎn))。客戶端處于白屏等待狀態(tài)并最終報(bào)錯(cuò);而在同樣的網(wǎng)絡(luò)環(huán)境下,系統(tǒng)瀏覽器可以打開該站點(diǎn);同一臺(tái)設(shè)備,切換到另一個(gè)網(wǎng)絡(luò)運(yùn)營(yíng)商下,也可以訪問該站點(diǎn)。

    2.3.2排查

    由于該問題直接表現(xiàn)在 Web 層,因此首先嘗試通過 Charles 抓取 HTTP 層包進(jìn)行分析。HTTP 日志發(fā)現(xiàn)相關(guān) HTTP 請(qǐng)求并未發(fā)出。

    由此懷疑問題發(fā)生在 TCP 層,進(jìn)而在受影響的設(shè)備上進(jìn)行問題復(fù)現(xiàn)及客戶端抓包操作。

    獲取到網(wǎng)絡(luò)包后,首先確認(rèn)問題:

  • 通過頁面域名在網(wǎng)絡(luò)包中尋找 DNS 解析結(jié)果;
  • 根據(jù) DNS 解析結(jié)果找到站點(diǎn) IP,并過濾出客戶端與該 IP 之間的訪問情況;
  • 觀察客戶端與該服務(wù)器之間的網(wǎng)絡(luò)活動(dòng),發(fā)現(xiàn)存在 TLS 握手失敗的情況:
  • 從上面的網(wǎng)絡(luò)包可以看到,服務(wù)端(機(jī)房 P 中的服務(wù)器提供接入服務(wù))在收到 Client Hello 后,直接返回了 Handshake Failure,這種情況下,一般需要服務(wù)端配合排查握手失敗的直接原因。在客戶端條件下,可以進(jìn)一步縮小排查疑點(diǎn)。

    重新考慮客戶問題條件:相同的網(wǎng)絡(luò)條件下,系統(tǒng)瀏覽器可以打開該頁面;同一設(shè)備切換到另一運(yùn)營(yíng)商下(站點(diǎn)此時(shí)由機(jī)房 Q 中的服務(wù)器提供接入服務(wù)),可以正常訪問。針對(duì)這這兩種正常情況進(jìn)行抓包和進(jìn)一步分析。

    通過對(duì)三種情況的網(wǎng)絡(luò)觀察發(fā)現(xiàn):

  • 問題 App 發(fā)出的 Client Hello 顯示支持 17 種加密套件:
  • 正常 App 發(fā)出的 Client Hello 顯示支持 26 種加密套件:
  • 正常 App 和機(jī)房 P 服務(wù)器協(xié)商的加密套件為:TLS_RAS_WITH_3DES_EDE_CBC_SHA (0x000a) (不在問題 App 支持的加密套件范圍內(nèi));
  • 問題 App 和機(jī)房 Q 服務(wù)器協(xié)商的加密套件為:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)(在問題 App 支持的加密套件范圍內(nèi));
  • 根據(jù)上述情況,可以推論問題的基本情況為:

  • 問題 App 發(fā)出去的握手請(qǐng)求,支持17種加密套件( A 集合);
  • 正常 App 發(fā)出去的握手請(qǐng)求,支持26種加密套件( B 集合);
  • 機(jī)房 P 的接入服務(wù)器,能支持 B 集合中的至少一種加密套件,不支持 A 集合中的所有加密套件;
  • 機(jī)房 Q 的接入服務(wù)器,既支持 A 集合中的至少一種加密套件,也支持 B 集合中的至少一種加密套件;
  • 最終導(dǎo)致 問題 App 無法通過 機(jī)房 P 中的服務(wù)器 訪問該站點(diǎn)。

    2.3.3 小結(jié)

    從上面的分析結(jié)論可以看到,由于客戶端和服務(wù)端加密套件不匹配,導(dǎo)致在特定情況下的握手失敗。進(jìn)一步的問題解決方案包括:

    調(diào)整客戶端加密套件,增加支持的 Cipher Suites(涉及客戶端底層 TLS/SSL 庫的升級(jí));

    調(diào)整服務(wù)端加密套件,增加支持的 Cipher Suites(涉及服務(wù)端 TLS/SSL 接入配置)。

    該客戶最終選擇調(diào)整服務(wù)端加密套件,問題得到解決。

    3.總結(jié)

    從上述案例的分享和實(shí)踐中可以看到,TLS 層面的問題在客戶端的癥狀表現(xiàn)上有相似之處,但是問題的根因卻大相徑庭。這里例舉的問題雖不能覆蓋所有的問題場(chǎng)景,但可以看到基本的排查思路如下:

    判斷問題是否屬于 TLS/SSL 層面的問題。

    抓取網(wǎng)絡(luò)包;有條件的情況下,可以針對(duì)正常和異常情況抓取兩份網(wǎng)絡(luò)包,以便后續(xù)進(jìn)行對(duì)比分析。

    根據(jù)網(wǎng)絡(luò)包探尋問題發(fā)生的直接原因,進(jìn)而進(jìn)一步探究問題的根本原因。

    根據(jù)分析結(jié)論并結(jié)合業(yè)務(wù)場(chǎng)景,選擇合適的解決方案。

    這類問題的排查基礎(chǔ)是對(duì) HTTPS 和 TLS/SSL 協(xié)議的理解以及對(duì)分析工具的掌握。在移動(dòng)領(lǐng)域,這類問題存在一定的共性,直接了解上述結(jié)論和分析方法可以幫助開發(fā)者快速“出坑”。

    參考

    • 如何抓取網(wǎng)絡(luò)包,https://help.aliyun.com/document_detail/159169.html
    • Security with HTTPS and SSL,https://developer.android.com/training/articles/security-ssl
    • Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile,https://tools.ietf.org/html/rfc5280

    彩(廣)蛋(告)

    針對(duì)市面上移動(dòng)應(yīng)用普遍存在的破解、篡改、盜版、釣?欺詐、內(nèi)存調(diào)試、數(shù)據(jù)竊取等各類安全風(fēng)險(xiǎn),mPaaS 「移動(dòng)安全加固」依賴于阿里云集團(tuán)的移動(dòng)安全加固技術(shù),經(jīng)歷了淘系等億級(jí)應(yīng)用的安全性考驗(yàn)。

    能夠有效為移動(dòng)應(yīng)用提供穩(wěn)定、簡(jiǎn)單、有效的安全保護(hù),提高 App 的整體安全水平,力保應(yīng)用不被逆向破解,在安全性上具有非常可靠的保障。

    ?

    ?

    ?

    原文鏈接
    本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

    總結(jié)

    以上是生活随笔為你收集整理的搞定客户端证书错误,看这篇就够了的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。