2013-03-30 38 views

回答

4

我認爲最好釘住主題的公鑰而不是根的CA公鑰。 這裏是我的寄託CA的根p鍵的不同權衡的理解:

只要你保持相同的CA,您將可以一遍又一遍地更新您的證書,並將其將始終工作。

我相信你會稍微更容易受到MITM攻擊牽制根CA的p鍵代替科目公鑰,因爲你會採取有效的由該CA簽署的任何證書,而不是隻那些真正符合你的主題的。

那麼如何固定主題的公鑰呢? 基本上,您應該比鎖定CA的公鑰更安全一些,並且即使證書過期並且您續訂它,只要您維護相同的公鑰,應用程序仍應繼續工作。

我剛剛張貼在如何針公鑰的問題和解決方案,我希望它可以幫助你: How to pin the Public key of a certificate on iOS

1

我想針的根CA的公鑰...

只是自行車棚,但它可能更安全地固定服務器或服務的證書或公鑰,而不是根或中間證書。如果您使用DigiCert或Verisign等公共CA(而不是私人公司CA),則尤其如此。

對於公共CA,CA可能會錯誤地發出第二個證書,客戶將無法區分「真實」證書(發給您的證書)和「假」證書(發佈的證書不正確地)。這在現實生活中發生過很多次,所以你應該期待它再次發生。

是更好地固定公鑰或subjectPublicKeyInfo?有人可以向我解釋哪種方法更好,爲什麼?

最好固定公鑰(至少在固定服務器證書的情況下)。

有些組織像Google一樣每隔30天左右輪換一次服務器證書。但是,他們重新認證相同的公鑰。例如參見Android 4.2 and Pinning。這意味着您將觀察到「密鑰連續性」,但是而不是「證書連續性」。

重新認證相同的公鑰是爲什麼CertPatrol在某些情況下在用戶體驗中失敗如此糟糕。在Google服務等情況下,我們確實需要一個公鑰處理程序。

0

因爲它包含實際公鑰和密鑰的算法(RSA,ECDSA等),所以最好釘住SPKI(主題公鑰信息)。這在這篇文章從谷歌的TLS大師更詳細的 https://www.imperialviolet.org/2011/05/04/pinning.html描述:

的SPKI包括公鑰的類型,與公共密鑰本身一起的一些參數。這一點很重要,因爲只是公開密鑰的散列會讓人誤解誤解攻擊。考慮一個Diffie-Hellman公鑰:如果只有公鑰而不是完整的SPKI,那麼攻擊者可以使用相同的公鑰,但是使得客戶端在不同的組中解釋它。同樣一個可能迫使RSA密鑰被解釋爲一個DSA密鑰等

與iOS應用程序內穿針SPKI一個挑戰是,在iOS安全框架不解析證書並提取提供的API SPKI位(https://nabla-c0d3.github.io/blog/2015/08/11/security-framework-wish-list/)。

好消息是,開源軟件庫可以完成以下工作:https://github.com/datatheorem/TrustKit