2017-05-09 6 views
1

TL; DRバージョン:サーバーの秘密鍵を渡すことを伴わないサーバー証明書をiOSクライアントに渡す方法はありますか?iOS - サーバー証明書をiOSクライアントのキーチェーンに挿入する方法

私は、MacOSサーバーアプリケーションと通信するiOSクライアントアプリケーションを作成しました(私は両端を制御しています)。物事をより安全にするために、自己署名証明書を使用して証明書のピン割り当てを実装しました。開発中にこれを達成するために、私はServer証明書をiOSクライアントアプリケーションにハードコーディングし、TLSハンドシェイク中に正確な証明書を提供するサーバーにのみ接続するようクライアントに指示しました。すべてがうまくいっています。

現実世界では、このシステムを1セット(1つのサーバー、各顧客に複数のクライアント)として販売しています。したがって、サーバー証明書をiOSクライアントにハードコードすることはできません。私の計画は、ここに述べたように代わりのiOSクライアントに(電子メールを介して)帯域外のサーバ証明書を提供することです:Making Certificates and Keys Available To Your App:

アプリは、自分のキーチェーンアクセスグループにキーチェーン項目にアクセスすることができます。

自分のアプリでデジタルIDを使用するには、コードを入力してインポートする必要があります。これは、通常、PKCS#12形式のBLOBを読み込み、関数を使用してBLOBの内容をアプリケーションのキーチェーンにインポートすることを意味します。SecPKCS12Import

IDをプロビジョニングする方法の1つは電子メールです。デバイスをプロビジョニングするときは、関連するユーザーに、PKCS#12ファイルとしてクライアントIDを添付した電子メールを送信します。

私の問題は、.P12ファイルは、証明書サーバの秘密鍵が含まれていることである - これは同様に沿って、秘密鍵を渡すために非常に間違っているようです。

サーバ証明書をサーバの秘密鍵を渡すことを伴わないiOSクライアントに渡す方法はありますか?

ありがとうございます!

答えて

1

私はここで物事を考えすぎていましたが、解決策は実際にはかなり簡単です。

帯域外のサーバーのパブリック証明書をcert.myCustomExt1234のようなカスタム拡張子でクライアントデバイスにメールするだけで済みました。これは、.crt拡張機能がiOSによって既に申し立てられているため、カスタム拡張機能(see apple docs here)を処理するためにアプリを登録する必要があるためです。その後、私のアプリでは、証明書のピン割り当てのロジックを、Out of Bandを使ってServer public certを使って行うことができます。

鍵は、ファイル拡張子をiOSで主張していないものに変更していました。

関連する問題