2011-05-09 53 views
5

我正在開發支持網絡的android應用程序,該應用程序使用SSL客戶端證書對我的服務器進行身份驗證和安全連接。如何以及使用何種服務器證書與Android SSL客戶端證書身份驗證

我有兩個問題:(1)我應該使用自簽名服務器證書還是商業證書? (2)我應該將服務器證書包含在用戶安裝的apk文件中,還是應該將應用程序連接到我的服務器以通過網絡獲取服務器證書(以使設備信任服務器證書)?

當我問我該「應該」做什麼時,我在問每個選擇有哪些好處和壞處?

現在我正在使用包含在apk文件中的自簽名證書。當用戶第一次運行應用程序時,它會將包含的自簽名證書讀取到信任存儲中,以便設備無需投訴即可連接到我的服務器。我想如果我使用商業證書,那麼我的問題#2可能會變得沒有實際意義,因爲設備可能信任來自服務器的證書而沒有問題。

一個更可能相關的細節:這個應用程序不是通過安卓市場發佈。用戶將從我的服務器上下載應用程序,這樣我可以包含任何我想要的服務器證書,如果需要的話,還可以爲每個用戶提供不同的服務器證書。

我對我的兩個問題的每個可能答案的各種優點和缺點有自己的想法,但我對其他人 - 希望安全意識 - 在這個問題上不得不說的話感興趣。

提前致謝!

+1

+1,因爲我面臨類似的問題。你最終走向了什麼方向? – 2012-03-23 15:09:41

+0

我選擇了自簽名證書,原因如下:(1)商業證書的好處是瀏覽器識別。我的android應用程序是我創建的,所以我可以包含任何我想要的根證書,因此使用商業證書並不會帶來任何邊緣優勢。另一方面,(2)商業證書帶來了風險,因爲現在我不僅容易受到攻擊我的安全,而且容易受到證書頒發機構的攻擊。如果CA遭到黑客攻擊,丟失私鑰或被欺騙發佈帶有域名的服務器證書,我可能會受到影響。機會渺茫,但爲什麼要拿?最後但並非最不重要的(3)錢。 – 2013-04-06 10:54:57

回答

1

我看不出沒有自籤的理由。儘管如此,我會提高一個檔次,並創建自己的認證中心。這樣可以確保您只能連接到具有由您的自定義CA簽名的證書的服務器,這比對服務器上的證書進行簡單的指紋檢查要好得多(即實際的加密安全性)。

下面是如何使用Ruby的OpenSSL綁定創建自定義CA的示例。該程序在大多數語言中都是相同的。 https://github.com/augustl/ruby-openssl-cheat-sheet/blob/master/certificate_authority.rb

您當然也可以使用必須由自定義CA爲您的服務器簽名的客戶端證書才能接受請求。請注意,這隻會是隱晦的 - 攻擊者將能夠從您的應用中提取私鑰和自定義的CA簽名證書。如果你的應用可以向服務器發送請求,任何人都可以:)

+0

如果我簽署自己的服務器證書,那麼根據定義,我充當證書頒發機構。 至於提取私人密鑰,他們描述的問題不適用於我的應用程序,因爲應用程序本身在用戶第一次運行它時會生成它自己的私人密鑰。與應用程序一起分發的唯一東西是服務器證書和可選的插入到apk中的唯一標記,以防止人們彼此共享應用程序。 – 2013-08-10 03:15:55

相關問題