2017-05-09 26 views
1

TL; DR版本:有沒有辦法通過一個服務器證書到iOS客戶端不還包括沿着服務器的私有密鑰傳遞?iOS版 - 如何獲得服務器證書成的iOS客戶端鑰匙串釘扎

我寫了我的MacOS的服務器應用程序進行通信的的iOS客戶端應用程序(所以我必須在兩端的控制)。我已使用自簽名證書實施了證書鎖定,以使事情更安全。爲了在開發過程中實現這一點,我將服務器證書硬編碼到iOS客戶端應用程序中,並告訴客戶端只連接到在TLS握手期間爲您提供確切證書的服務器。一切都很好。

然而在現實世界中我賣這個系統爲一組(1個服務器,多個客戶端對每個客戶的),所以我不能硬編碼服務器證書插入iOS客戶端。我的計劃是代替交付服務器證書帶外(通過電子郵件)與iOS的客戶喜歡這裏提到的:Making Certificates and Keys Available To Your App:

應用程序只能訪問自己的鑰匙串訪問組鑰匙串項目。

要在您自己的應用程序中使用數字身份,您需要編寫代碼來導入它們。這通常意味着讀取PKCS#12格式的blob,然後使用函數將blob的內容導入到應用程序的鑰匙串中。使用函數SecPKCS12Import

提供身份的一種方法是通過電子郵件。在供應設備時,請向關聯用戶發送電子郵件,並將其客戶端標識作爲PKCS#12文件附加。

我的問題是,的.p12文件包含證書服務器的私有密鑰 - 這似乎是非常錯誤的通過私有密鑰一起爲好。

是否有任何其他的方式來傳遞的服務器證書的IOS客戶端,並不涉及也沿着服務器的私有密鑰傳遞?

謝謝!

回答

1

我在這裏推翻了一些東西,解決方案其實很簡單。

我只需要到服務器的公證書具有自定義擴展像cert.myCustomExt1234電子郵件頻帶外的客戶端設備。這是因爲iOS已經聲稱.crt擴展程序,所以您必須註冊您的應用程序才能處理自定義擴展程序(see apple docs here)。然後在我的應用程序中,我可以使用帶外提供的服務器公共證書來執行所有證書固定的邏輯。

的關鍵是改變文件擴展名尚未通過的iOS聲稱的東西。