iPhoneでSSLクライアント認証したり(私は繋ぐ先がありませんが)VPN接続したり(iPhoneにはS/MIME対応のメーラーが無いようですが)S/MIME署名・暗号メールを送ったりするには自分の証明書と鍵を入れてあげなければなりません。

その際に、iPhone構成ユーティリティーというのを使うんだそうです。iPhone Labさんの「iPhone 3Gでユーザー証明書を利用してみる」にかなり詳しく書かれていたので、これを参考に自分もやってみました。iPhone LabさんではMac OSでやっていますが、自分のはWindowsなので若干手順が違います。

まずは
iPhone構成ユーティリティーのWindows版をAppleのサイトからダウンロードしインストールします。

クライアント証明書インストールの構成をする際には、(Windowsを母艦にして行う場合)自分の証明書がWindowsの個人証明書ストアに入っている必要があります。(PKCS#12(.pfx)ファイルを持っているだけではだめです。)事前に準備しておきます。

構成ユーティリティーを起動し、左側ペインの「構成プロファイル」を選択し上の「新規」ボタンを押し、「一般」を選び、プロファイルに名前を適当につけます。
・名前
・識別子 (ドメイン名みたいなもん)
・組織 (構成プロファイルを発行する組織。オレ様ですね。)
を入力しておきます。
iphonecert01anon


クライアント証明書のインストールには「資格情報」を選び、「構成」のボタンを押します。
iphonecert02anon


Windows証明書ストアの個人ストアから自分がiPhoneで使いたい証明書(と鍵)を一つ選びます。(ここでは余分な自分が秘密鍵を持っているわけもないルート証明書なんかも選択できてしまいます。選ぶのが大変なので辞めて欲しいです。)
iphonecert03anon


iPhoneでインポートする際に求められるパスワードを設定します。
iphonecert04


無事設定できました。ファイルを書き出すために上の方の「書き出す」ボタンを押します。
iphonecert05anon


構成プロファイルには署名することができるそうです。署名が好きなのでw迷わず署名します。
iphonecert06


これで、無事構成ファイルができました。拡張子は ".mobileconfig" というファイルになります。

これをメールに添付してiPhoneに送ります。するとiPhoneでは"You got a mail!"します。
IMG_0030


先ほどのファイルが添付されているのでコレを開きます。
IMG_0031anon


こんな風な設定画面が表示されるので、「インストール」のボタンを押します。
IMG_0032anon


先ほど設定されたパスワードを入力すると、無事クライアント証明書がインストールされました。
IMG_0033anon


接続確認のため、iPhoneのブラウザSafariで、この証明書(と鍵)でSSLクライアント認証するウェブサイトに接続してみたところ、ちゃんと接続できました。

この証明書はS/MIME証明書にもなるんですが、ちょっと探してみたところ、iPhoneではS/MIME対応のメーラーが無いようなんです。とても残念。見つけたら試してみたいと思います。

さて、先ほど生成した構成プロファイルですが、ファイルを見てみたところ内包署名のPKCS#7署名データになっていました。署名は"uniqueIdentifier=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, CN=iPCU CA XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"のような識別名の自己署名証明書でやっていました。

署名対象データを取り出してみるとPKCS#12秘密鍵ストアをBase64エンコーディングして格納してちょっと属性をつけたXMLファイルになっていました。
<plist>
 <dict>
  <key>PayloadContent</key>
   <array>
   <dict>
   <key>PayloadContent</key>
   <data>Base64形式のPKCS#12秘密鍵ストア</data>
   <key>PayloadDescription</key>
   <string>Provides device authentication (certificate or identity).</string>
   <key>PayloadType</key>
   <string>com.apple.security.pkcs12</string>
   ・・・略・・・
   </dict>
   </array>
  ・・・略・・・
 </dict>
</plist>


dictの構造がXML的でなく気持ち悪く、なんとなくPDFのディクショナリに近いものを感じてしまうのは私だけでしょうか、、、