如果它只是您的客戶端和服務器,您可以(也應該)使用相互認證的SSL,而無需購買任何東西。您控制服務器和客戶端,因此每個應只信任一個屬於另一個的證書,並且您不需要CA用於此目的。
這是高層次的方法。創建一個自簽名服務器SSL證書並部署到您的Web服務器上。爲此,您可以使用Android SDK附帶的keytool。然後創建一個自簽名客戶端,並將其作爲資源部署在您的應用程序中的一個自定義密鑰庫中(keytool也會生成這個)。將服務器配置爲需要客戶端SSL身份驗證,並僅接受您生成的客戶端證書。配置客戶端使用該客戶端證書來標識自身,並且只接受服務器上安裝的那一部分服務器端證書。
這是一個比這裏保證的更長的答案。我建議分步實施,因爲網上有資源介紹如何處理Android中的自簽名SSL證書,包括服務器和客戶端。在O'Reilly出版的我的書「Android應用安全平臺」中也有一篇完整的介紹。
您通常會將該證書/私鑰存儲在某種類型的密鑰庫中(如果您使用的是Android,則爲KeyStore)並且該密鑰庫將被加密。該加密基於密碼,因此您需要(1)將密碼存儲在客戶端的某處,或(2)在啓動客戶端應用程序時詢問用戶密碼。你需要做什麼取決於你的用例。如果(2)可以接受,那麼你已經保護了你的憑證免受逆向工程,因爲它將被加密並且密碼將不會被存儲在任何地方(但用戶需要每次都鍵入)。如果你做了(1),那麼有人能夠逆向工程你的客戶端,獲取密碼,獲得密鑰庫,解密私鑰和證書,並創建另一個能夠連接到服務器的客戶端。
沒有什麼可以做,以防止這種情況;你可以更難地對你的代碼進行逆向工程(通過混淆等),但是你不能讓它變得不可能。您需要確定使用這些方法試圖緩解的風險是多少,以及需要做多少工作才能減輕風險。
+1,我只是面臨同樣的問題... – 2012-04-14 16:52:09