リファレンス
#下準備
- 平文、未署名の構成プロファイルを作成する。(サンプルはパスコード必須化プロファイル)
- 「PayloadContent」キー内のトップレベルarrayを切り取る。
- 別ファイルに貼り付け、例として「content.plist」として保存
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<!-- ここから -->
<array>
<dict>
<key>PayloadDescription</key>
<string>パスコード設定を構成します</string>
<key>PayloadDisplayName</key>
<string>パスコード</string>
<key>PayloadIdentifier</key>
<string>com.apple.mobiledevice.passwordpolicy.075922A0-F3E8-4021-9299-05DCE5737A69</string>
<key>PayloadType</key>
<string>com.apple.mobiledevice.passwordpolicy</string>
<key>PayloadUUID</key>
<string>075922A0-F3E8-4021-9299-05DCE5737A69</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>allowSimple</key>
<true/>
<key>forcePIN</key>
<true/>
<key>requireAlphanumeric</key>
<false/>
</dict>
</array>
<!-- ここまで --->
<key>PayloadDisplayName</key>
<string>構成プロファイル</string>
<key>PayloadIdentifier</key>
<string>com.example.sampleprofile</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>04DE3942-1870-4C98-B901-5A233EA772BF</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>
- 「PayloadContent」キーを「EncryptedPayloadContent」に変更する。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EncryptedPayloadContent</key>
<!-- ここから -->
<!-- ここまで --->
<key>PayloadDisplayName</key>
<string>構成プロファイル</string>
<key>PayloadIdentifier</key>
<string>com.example.sampleprofile</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>04DE3942-1870-4C98-B901-5A233EA772BF</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>
#ペイロードコンテンツの暗号化
macOS Sierra, OpenSSL 0.9.8zh 14 Jan 2016
$ openssl smime -encrypt -aes256 \
-in content.plist \
-outform pem \
[証明書].cer
-----BEGIN PKCS7-----
44G744GS44G044KICg==(もっと長い)
-----END PKCS7-----
「-----BEGIN PKCS7-----」から「-----END PKCS7-----」までの間のBase64符号化されたデータをコピーする。
#暗号化プロファイルとして結合
プロファイルの「EncryptedPayloadContent」下にDataとして貼り付ける。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EncryptedPayloadContent</key>
<!-- ここから -->
<data>
44G744GS44G044KICg==
</data>
<!-- ここまで --->
<key>PayloadDisplayName</key>
<string>構成プロファイル</string>
<key>PayloadIdentifier</key>
<string>com.example.sampleprofile</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>04DE3942-1870-4C98-B901-5A233EA772BF</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>
#使い方と個人的まとめ
-
iOS9までは、復号できない場合はその旨を表示していたがiOS10の場合は、ただのxmlとして扱われる模様
- プロファイルインストール画面に遷移せず、OpenInが働く
-
復号させる場合は、iOS側に秘密鍵を入れておく必要がある。
- p12ファイルをメールで送る、p12を含むプロファイルをインストールしておく
-
署名をする場合は、暗号化プロファイル作成後に署名する。
-
暗号化することで、パスワード類を含めて平文で見えることはなくなるが、公開鍵暗号の仕様上、復号できなくもないため、内容を秘匿したい場合は秘密鍵の配布方法を考慮する必要がある。
- p12をメールで送ると、そこから秘密鍵を取り出して復号できなくもない。
- p12を含めたプロファイルにはp12のパスワードが平文で入る。
-
秘密鍵を持っていないとプロファイルのインストールができないので、不特定多数への配布には不向き
-
業務利用する場合は、秘密鍵を事前にConfiguratorで入れておけばいいかもしれない。
- もっとも、その場合は大人しくMDMを利用する方が楽
結論:使い途が思いつかない。
おまけ
暗号化プロファイルがインストールされた場合、iTunesとかでのバックアップ時に暗号化が必須とされる。はまった。