iOS でクライアント証明書認証

長年 Android を使っていたんですが、最近 iPhone にしまして。

cybozu.com にリモートからアクセスする際、クライアント証明書で認証する「セキュアアクセス」という機能があるのですが、Safari で使うには証明書を読み込ませておかねばなりません。

Android では PKCS#12 形式のファイルを選択するだけで読み込めたのですが、iPhone だとユーザーインタフェースがないのですね。 調べてみると、会社の iPhone をまとめて設定するために使う「構成プロファイル」という機能があり、この一機能でクライアント証明書を設定できるようです。

構成プロファイルは .mobileconfig という拡張子の XML ファイルで、以下のように自作できます。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Inc//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>PayloadVersion</key>
        <integer>1</integer>
        <key>PayloadUUID</key>
        <string>Ignored</string>
        <key>PayloadType</key>
        <string>Configuration</string>
        <key>PayloadIdentifier</key>
        <string>Ignored</string>
        <key>PayloadContent</key>
        <array>
            <dict>
                <key>PayloadContent</key>
<data>
(Base64 形式の証明書データ)
</data>
                <key>PayloadDescription</key>
                <string>Provides client certificate for cybozu.com</string>
                <key>PayloadUUID</key>
                <string>4b3bc45a-796d-4349-9ee6-bbd95d3424c8</string>
                <key>PayloadType</key>
                <string>com.apple.security.pkcs12</string>
                <key>PayloadDisplayName</key>
                <string>yourdomain.s.cybozu.com</string>
                <key>PayloadVersion</key>
                <integer>1</integer>
                <key>PayloadOrganization</key>
                <string>Cybozu, Inc.</string>
                <key>PayloadIdentifier</key>
                <string>com.cybozu.s.yourdomain</string>
            </dict>
        </array>
    </dict>
</plist>

(Base64 形式の証明書データ)PKCS#12 形式のファイル(.pfx)を以下のように Base64 に変換した文字列です。

base64 -w 52 mycert.pfx

PayloadDisplayName, PayloadUUIDPayloadIdentifier は適宜変更してください。

作成した XML.mobileconfig 拡張子で名前を付けて、メールで送ります。 メールを iOS 付属のメールアプリで開けば、構成プロファイルとして読み込むことができます。

Have fun!