簡體   English   中英

使用Microsoft Azure SDK在iOS中進行SSL證書固定

[英]SSL Certificate Pinning in iOS with Microsoft Azure SDK

通常,這不是關於證書固定的問題。

我正在編寫一個利用適用於iOS的Microsoft Azure SDK的iOS應用。 他們尚未實現證書固定,因此我下載了完整的SDK,並對其進行了修改以添加自己的固定。

我正在遵循OWASP提供的示例代碼。 它要求我在終端中執行以下代碼:

$ echo "Get HTTP/1.0" | openssl s_client -showcerts -connect www.random.org:443

我已經運行了,將{url}.azurewebsites.net www.random.org 我得到了很好的輸出,列出了幾個證書。

基於OWASP代碼,看來我應該使用這一代碼:

Certificate chain
 0 s:/CN=*.azurewebsites.net
   i:/C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/OU=Microsoft IT/CN=Microsoft IT SSL SHA2

我對此擔心的是CN是通配符*.azurewebsites.net 這是否意味着如果我使用此證書,並且有人嘗試使用另一個Azure Web應用程序進行中間人攻擊,那么該證書固定將為他們成功,從而無法保護我的應用程序?

例如,如果我的應用程序位於abc.azurewebsites.net ,而中間人攻擊是從xyz.azurewebsites.net運行的,我的應用程序是否知道會阻止該請求?

已在Azure中注冊xyz.azurewebsites.net的攻擊者無法使用xyz.azurewebsites.net進行MitM攻擊,因為他不知道私鑰。 只有Azure知道私鑰的值。

因此,這不是因為已注冊xyz.azurewebsites.net的人能夠攔截您的應用程序與abc.azurewebsites.net之間的通信, abc.azurewebsites.net他可能欺騙您的應用程序。 但是請注意,這與證書的公鑰固定無關。

首先,讓我們討論一下您不擁有的證書的公鑰固定。

在這種情況下,請特別注意以下事實:如果必須管理服務器證書,則每次必須請求CA為您頒發新證書時,都可以重用同一密鑰。 因此,您可以避免實現OWASP所謂的密鑰連續性 (請參閱https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning )。 但是,在您的情況下,Microsoft可以在頒發新證書時使用新密鑰。 在這種情況下,您的應用將停止工作,而這不是您想要的。 因此,固定時應實現密鑰連續性。

因此,如果您只想在應用程序中實現靜態固定的密鑰,我認為這很危險。 Microsoft可以根據需要更改公共密鑰。 例如,如果他們的私鑰被盜,他們將使用新的公鑰生成一個新證書(並且它們將撤消之前的證書)。 在這種情況下,您的應用程序將看到一個新密鑰,但不應停止該請求。

現在,讓我們討論具有通配符證書的密鑰連續性的公共密鑰固定。

1-首先,假設有人成功地為*.azurewebsites.net頒發了真實證書。 由於您的應用使用通配符證書的公鑰固定,因此您的應用將看到此證書不包含正確的公鑰。 因此,您的應用將阻止該請求。

2-現在,假設有人成功地為xyz.azurewebsites.net頒發了真實證書。 因此,您的應用程序將看到證書既不是abc.azurewebsites.net也不是*.azurewebsites.net 因此,您的應用將停止請求。

3-最后,假設有人成功地為abc.azurewebsites.net頒發了真實證書。 您的應用程序將看到abc.azurewebsites.net的正確證書。 因此,您需要在應用程序中編寫錯誤代碼,以使其停止請求,因為您知道Azure不會頒發此類證書。

暫無
暫無

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

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