簡體   English   中英

固定移動應用程序的證書

[英]Certificate pinning mobile apps

我正在嘗試在我的應用程序上實現證書固定。 據我了解,有 3 種類型的固定可用:

  • 證書固定; 證書應該在應用程序中“硬編碼”,並與來自服務器的證書進行比較。 這有點糟糕,因為如果需要輪換證書,則需要更新應用程序。
  • 公鑰固定; 根據我的研究,這似乎已被棄用
  • SubjectPublicKeyInfo(SPKI) 固定; 這是公鑰的 hash。 這種方法的優點是,如果證書需要輪換,新證書的公鑰對於新證書可以保持不變,這樣就不需要更新。

根據我所說的,似乎推薦的方法是 SPKI pinning。

我的應用程序可以連接到多個服務器,基於用戶在登錄時鍵入的 ip。 這是我實施的想法,但我不確定它是否可行。

我將創建一個由 CA 簽名的中間證書。 然后創建我自己的公私鑰。 然后我的應用程序可以連接的每台服務器都需要我請求使用我的私鑰簽署他們的證書。 層次結構將是 RootCertificate(由 CA 自簽名),然后是我的中間證書(由 CA 簽名),然后是我的應用程序可以連接的每個服務器的證書,由我的私鑰簽名。

在應用程序上,我將從我的中間證書存儲公鑰的 hash。 在第一次連接到隨機服務器時,應用程序將獲得 3 個證書:服務器證書、我的中間證書和根證書。 檢查哈希時會發現與我的公鑰匹配。

你怎么看? 這可以實施嗎? 我理解錯了嗎? 這種方法容易受到中間人攻擊嗎? 謝謝!

我的應用程序可以連接到多個服務器,基於用戶在登錄時鍵入的 ip。 這是我實施的想法,但我不確定它是否可行。

我將創建一個由 CA 簽名的中間證書。 然后創建我自己的公私鑰。 然后我的應用程序可以連接的每台服務器都需要我請求使用我的私鑰簽署他們的證書。 層次結構將是 RootCertificate(由 CA 自簽名),然后是我的中間證書(由 CA 簽名),然后是我的應用程序可以連接的每個服務器的證書,由我的私鑰簽名。

在應用程序上,我將從我的中間證書存儲公鑰的 hash。 在第一次連接到隨機服務器時,應用程序將獲得 3 個證書:服務器證書、我的中間證書和根證書。 檢查哈希時會發現與我的公鑰匹配。

我會簡化這種方法,只需鎖定每個后端服務器, Mobile Certificate Pinning Generator工具可以幫助您提取多個域/ips 的 pin,同時生成正確的 pinning 配置以在AndroidiOS中使用。

假設您的移動應用程序需要與example.comhttpbin.orggoogle.com進行通信。

只需在“配置”選項卡中配置您要固定的域:

配置選項卡

提交表單后,您將進入結果選項卡,然后導航到 Android 選項卡:

Android 網絡安全配置文件

在 iOS 選項卡上:

iOS info.plist 固定配置

在每個配置下方,您都有關於如何將每個配置添加到移動項目中的說明,甚至還有指向 Github 的分步教程的鏈接,該教程使用AndroidiOS的引腳測試應用程序。

固定每個后端證書的優點是,您現在可以讓每個人使用 LetsEncrypt 自動生成他們的證書,在續訂之間保留公鑰,因此無需更改移動應用程序中的 pin,除非私鑰泄露發生。 您可以將 LetsEncrypt 替換為允許您在保持相同公鑰的同時輪換證書的任何內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM