關於 APP 預埋檢查策略優化

2021-10-20 08:21:18 字數 1344 閱讀 7857

對伺服器證書網域名稱進行強校驗(僅供開發人員參考):

實現 hostnameverifier 的 verify()方法:

保證通訊安全至少要使用 https 協議,也就是說使用安全傳輸層協議(tls)或是它的前身安全套接層協議(ssl)加密的通訊。

ssl 證書鏈結構關係

公網可信 ssl 證書(至少)包括三個證書:

1、根證書:這是由證書認證機構(ca)頒發的,也就是乙個可以確保整個通訊時安全的值得信任的組織。

2、中級證書:乙個根證書下有多個中級證書。它們建立伺服器證書和根證書的信任橋梁,是連線伺服器證書和根證書的證書鏈,由根證書簽名的證書。

3、伺服器證書:伺服器證書是繫結最終請求網域名稱的證書,為最終的加解密證書檔案。

證書檢查

1、certificate pinning

其實 certificate pinning 是 okhttp 實現的乙個類似於 hpkp 的技術,目的是為了使客戶端可以有主動的信任ca 的權利,它的工作原理就是使用預先設定的證書指紋和伺服器傳過來的證書鏈中的證書指紋進行匹配,只要有任何一對指紋匹配成功,則認為是一次合法的連線,否則禁止本次鏈結。

2、預埋證書

把數字證書以檔案或者字串的形式寫在本地,在 ssl 握手的時候用本地預埋的證書和伺服器傳過來的證書進行匹配,如果匹配不成功則禁止本次通訊。

certificate pinning 和預埋證書做法的比較(以 okhttp 為例)

3、預埋證書的寫法

首先定義乙個類實現類實現 x509trustmanager 介面,實現對客戶端證書鏈的校驗方法和服務端證書鏈的校驗方法,不寫的話表示不做任何校驗,預設信任所有證書鏈中的證書。

由於證書存在生命週期和可變性,證書更新和證書鏈變更都會導致這種預埋失效,從而帶來業務中斷風險。

certificate pinning 的寫法

範例**:

證書在使用過程中會存在不可避免的證書續期和替換更新,每次操作都會導致證書的指紋發現不可逆的變化,一旦使用了 certificate pinning 方式,都會在證書更新之後帶來業務中斷等情況。

關於CORS預檢

最近公司要求去掉所有請求的 於是發現了乙個很奇妙的問題,請求乙個服務時,使用 get 返回的是正確的,但是使用openlayers.request.get則會返回500,於是開啟控制台看看兩個請求之間的區別 心思縝密的我一下子就發現了問題 openlayers.request.get發出的竟然是op...

CORS預檢請求詳談CORS預檢請求詳談

最近在專案中因前後端部署不同地方,前端在請求後端api時發生了跨域請求,我們採用cors 跨域資源共享 來解決跨域請求,這需要前後端的配合來完成。在這一過程中,後端支援了cors跨域請求後,前端的請求配置可能會調起cors的preflight請求,也就是我們所說的預檢請求。對cors不太熟悉的可能會...

preflight request預檢請求

preflight request預檢請求,負責檢查是否允許跨域請求,但是注意並不是所有的跨域請求都會傳送preflight請求。對與那些冪等的請求,如get請求,就不會傳送preflight請求。只有那些會改變伺服器狀態的請求才可能傳送preflight請求,如果post delete和put請求...