Certificate Pinning(憑證釘選) 是一種用來防止「中間人攻擊(MITM)」的 HTTPS 強化機制,在過去一直被認為是必須執行的安全程式寫法。光盾資訊過去也曾發表相關研究:  https://cccisa.ccisa.org.tw/article/download/1961/1968

光盾團隊也把相關內容應用於滲透測試(https://www.rayaegis.com/solutions/service/pentesting/)。

然而,近幾年相關安全性的做法有了變化。Android 官方文件(https://developer.android.com/privacy-and-security/security-ssl#Pinning)指出:

Certificate pinning is not recommended for Android apps. Future server configuration changes such as changing the CA will render pinned apps unable to connect without an app update.

儘管Android 仍提供 Network Security Configuration 供開發者管理信任 CA、Certificate Transparency 與選用 Pinning,但官方明確標註為不建議作為一般做法。

Android 官方(https://developer.android.com/privacy-and-security/security-config、https://developer.android.com/privacy-and-security/certificate-transparency-policy)也建議使用 Certificate Transparency,要求伺服器憑證必須存在於公開 CT Log,否則連線將被拒絕。

iOS官方文件(https://developer.apple.com/news/?id=g9ejcf8y)亦指出 :「In most cases, pinning is not necessary and should be avoided.」。

為何 Certificate Pinning 不再具有實質價值

一: 官方平台都不再推薦

iOS 明確指出多數情況應避免使用 pinning:

https://developer.apple.com/news/?id=g9ejcf8y

Android 明確標註 pinning 為 not recommended:

https://developer.android.com/privacy-and-security/security-ssl#Pinning

二: 營運風險過高

憑證或 CA 更新會導致所有已安裝 App 立即無法連線,必須透過 App 更新才能修復

https://developer.android.com/privacy-and-security/security-ssl#Pinning

三: 平台已具備更完整防護

Trust Store 機制

OCSP 與 CRL 撤銷檢查

Certificate Transparency 防止未登錄憑證

https://developer.android.com/privacy-and-security/certificate-transparency-policy

App Transport Security (ATS): Apple 官方文件(https://developer.apple.com/news/?id=g9ejcf8y)明確指出 “Pinning is not required and should be avoided”,並說明系統預設的 ATS 機制(https://developer.apple.com/documentation/security/preventing-insecure-network-connections)已提供足夠的信任評估。

 Certificate Transparency (CT): iOS 系統層級強制執行 CT 政策,未登錄於公開 Log 的憑證會直接被系統拒絕,無須 App 自行實作防護。

四:現代攻擊模型已不以假憑證為主

Hook、Proxy、重播、自製客戶端、App 修改皆可繞過 pinning,平台已改採 App 與裝置完整性驗證取代靜態憑證防護。

最終結論建議

考量到行動平台的演進與現代資安架構的改變,我們不再建議將 Certificate Pinning 列為一般 App 的「必要測試項目」(Necessary Requirement),原因如下:

  1. 官方明確不推薦: Google 與 Apple 官方文件皆指出 Pinning 帶來的維護成本與連線中斷風險遠高於其安全效益,並建議改採 Certificate Transparency 與系統信任儲存區。配合現代 DevOps 短效期憑證自動化更新的趨勢,靜態綁定憑證極易導致 App 在憑證輪替時發生大規模服務中斷(Outage)。
  2. 防護效益邊際化: 針對「網路中間人攻擊(MITM)」,現代 OS預設不信任使用者憑證已提供足夠防護;針對「裝置端攻擊(Hook/Root)」,Pinning 可被繞過,不具足夠的防禦力。

建議調整方向: 應將資安測試重點轉移至 「應用程式完整性驗證(App Attestation/Integrity API)」 與 「伺服器端憑證透明度(CT)配置」,此為更符合現代威脅模型的防禦策略。