2011-01-05 76 views
1

有人問我是否可以在連接期間檢查SSL證書的某​​些屬性以提高性能。檢查SSL屬性ASIHTTPRequest

請參閱從PayPal網站所附圖片:

enter image description here

有沒有什麼辦法來讀取這些值?如果我可以通過瀏覽器瀏覽網頁來獲取它們,我可以通過使用NSURLConnection,NSData或(最重要的)ASIHTTPRequest連接到服務器來讀取它們嗎?

當然,我正在使用的證書是有效的,而不是自簽名/不可信。這種驗證是否會提高應用程序的安全性?

回答

0

如果您的目標是提高性能,您希望在SSL握手完成之前檢查證書。爲連接協商對稱密鑰是建立連接的計算成本很高的部分。

建立SSL連接後,您可以檢查證書中的任何內容。從性能角度來看,竅門是進入一種狀態,在握手完成之前可以反彈連接。

我有兩個想法: 1 - 看看你的服務器可以使用哪些SSL庫,以及他們會允許你做什麼約束。通常SSL庫將讓你:

  • 限制當前有效期

到受信任的證書連接

  • 檢查一些較高端庫也會讓你做一個OCSP檢查或CRL檢查來驗證當前狀態。

    大多數圖書館都會讓你連接並編寫自己的驗證 - 但是你必須真正深入細節並弄清它是否允許你在連接建立之前或之後進行驗證。

    2 - SSL性能改進的另一個技巧是設置您的服務器,以便它們重用先前會話中的共享密鑰。當相同的兩點重新建立連接時,這消除了設置成本。如果您沒有安全存儲,這會讓您的系統處於危險之中。但是,如果你正確保護密鑰存儲,這可能是一個可以接受的交易。

    這很大程度上取決於您的環境 - #2並不是環境中衆多連接的勝利 - 您將無法將連接重新利用以足以存儲信息。

  • 1

    對於ASIHTTPRequest,答案是否定的。

    對於NSNURLConnection,有可能使用

    - (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
    

    你可以看到我的回答類似的問題,這裏閱讀這些值:ASIHTTPRequest retrieve server certificate

    這種技術被稱爲SSL鋼釘。它使SSL連接更強大。你可以在這裏閱讀更多:https://www.isecpartners.com/blog/2013/february/ssl-pinning-on-ios.aspx