20

クライアント証明書を使用して https 経由で Web サービスにアクセスする必要がある iphone アプリを構築しています。クライアント証明書 (pkcs12 形式) をアプリ バンドルに入れると、それをアプリに読み込んで https 呼び出しを行うことができます (主に stackoverflow.com のおかげです)。

ただし、証明書なしでアプリを配布し、ユーザーが独自の証明書を提供するように任せる方法が必要です。iPhoneのプロファイル(設定->一般->プロファイル)に証明書をインポートするようにユーザーに指示するだけでそれを行うと思いました。これは、Mail.appで.p12ファイルを開いて取得し、そのアイテムにアクセスします私のアプリで。プロファイルの証明書はキーチェーン API を介して利用できると期待していますが、それは間違っていると思います。

1) アプリの iPhone のプロファイルに既に読み込まれている証明書にアクセスする方法はありますか?

2) ユーザー指定の証明書をアプリに読み込むための他のオプションはありますか? 私が思いつくことができる唯一のことは、ユーザーが自分の .p12 証明書に URL を与えることができるインターフェイスを提供することです。これは後で使用するためにアプリのキーチェーンにロードできますが、それは正確にはユーザーフレンドリーではありません。ユーザーが証明書を電話に出して(自分にメールで)、アプリにロードできるようにするものを探しています。

4

7 に答える 7

3

私はこれで試しました:

NSString *thePath = [[NSBundle mainBundle] pathForResource:@"certificate" ofType:@"p12"]; 
NSData *PKCS12Data = [[NSData alloc] initWithContentsOfFile:thePath]; 
CFDataRef inPKCS12Data = (CFDataRef)PKCS12Data; 
CFStringRef password = CFSTR("pass"); 
const void *keys[] = { kSecImportExportPassphrase }; 
const void *values[] = { password }; 
CFDictionaryRef optionsDictionary = CFDictionaryCreate(NULL, keys, values, 1, NULL, NULL); 
CFArrayRef items = CFArrayCreate(NULL, 0, 0, NULL); 
SecPKCS12Import(inPKCS12Data, optionsDictionary, &items); 

inPKCS12Data は正しいですが、項目が空です。何が起こっている?

于 2010-01-27T09:27:34.977 に答える
2

アプリのドキュメントフォルダーにiTunes経由でアクセスできるようにすることで、最近のアプリでこれを行いました。ユーザーは、生成されたキー (p12 形式のファイル) を iTunes のアプリのドキュメント パネルにドラッグするように指示されます。アプリが開始されると、p12 ファイルの存在がチェックされ、存在する場合は、そのファイルがキーチェーンにインポートされます。

これは最も単純な手順ではありませんが、電子メールで送信される秘密鍵ファイルがないため、最も安全です。

于 2011-04-25T19:13:12.817 に答える
1

アプリの配布に AirWatch を使用している場合、AirWatch の SDK は、認証局から登録済みのデバイスに証明書をプロビジョニングする機能を提供します。これにより、証明書をプロビジョニングして、アプリのコードから証明書にアクセスできます。

于 2015-12-04T16:23:56.023 に答える
1

.p12 ファイルが大きすぎない場合は、Base64を使用してエンコードし、カスタム URL スキームを使用してメールにリンクを埋め込むことができます。

myapp://certificate/<base 64 data>

ユーザーがリンクをクリックすると、アプリは将来の使用のために証明書をどこかに保存します。ただ、iPhone の Mail.app が電子メールを台無しにしないことを確認してください。

于 2010-01-10T14:24:14.233 に答える
1

Apple は、デバイス全体のキー/証明書の使用を、WiFi、VPN、メールなどの独自のアプリケーション/サービスに制限しています。サードパーティのアプリケーションは、これらのキー/証明書のいずれも使用できません (脱獄なし)。ただし、アプリケーションは、アプリ内キーチェーンでキーと証明書をインポート、保存、および使用できます。さらに、 iOSのkeychain-access-group機能を使用して、複数のアプリケーション間でキー/証明書を共有できます。

私は最近、 mCMS でアプリ内モバイル証明書を簡単に作成というタイトルのブログ投稿を公開しました。当社は、Microsoft ベースの PKI から直接取得したアプリ内証明書を簡単にサポートできるようにする API を開発しています。私たちのソリューションは、別のマシンで P12 を生成してアプリにインポートしようとする代わりに、オンデバイスのキー生成も提供します。

于 2012-07-27T14:32:24.807 に答える
0

ああ、これは2009年10月/ 11月からの辛い思い出をもたらします。クライアント側の証明書を正常に機能させることができましたが、libcurlをiPhoneに移植する必要がありました(NDAがまだ有効だったため、簡単ではありませんでした。時間)。

私は1年以上iPhoneアプリの開発を行っていないので、どれだけ変更されているかはわかりませんが、私があなただったら、最初はクライアント側の証明書なしでやってみようと思います。 PEM形式の証明書でlibcurlを使用します。

于 2010-04-02T02:04:59.433 に答える
0

キーチェーンでの証明書の検索で提案されているコードは機能しますか?

于 2010-01-10T13:58:58.917 に答える