私は独自の MDM サービスの展開に取り組んでおり、Apple の MDM プロトコル ドキュメントが示唆するように、SCEP と MDM ペイロードを結合しようとしています。C# .Net で独自の SCEP Web サービスを作成しましたが、SCEP ペイロードを送信するだけでデバイスが有効な証明書を取得できることがわかっています。ただし、IdentityCertificateUUID キーを介して SCEP ペイロードの UUID を指す MDM ペイロードも含めると、「登録サーバーは有効な ID 証明書をプロビジョニングしませんでした。」というエラーが表示されます。初期登録構成のインストールを選択します (この図のフェーズ 2 のステップ 1)。
デバイスはサーバーへの接続を試みているようにも見えず、サーバー側のログのおかげで、SCEP Web サービス ページに到達しないことがわかっています。これは、ペイロードの署名に使用する証明書に問題があることを示しているようです。SSL証明書(事前に信頼されたルート機関から)、顧客のMDMプッシュ証明書(ベンダー証明書からチェーン)、および自己署名ルート認証局証明書(makecert.exeで作成)で個別に署名しようとしました。 SCEP サービスは、新しい証明書 (つまり、デバイス ID 証明書) を発行するために使用します。
MDM ペイロードと SCEP ペイロードの両方を含むプロファイルを作成したときの iPCU (iPhone 構成ユーティリティ) からの出力を確認しましたが、有効なプロファイルではありません (ほぼ大規模にコピーしようとさえしました)。ただし、iPCU 経由でプロファイルをインストールすると、エラーは表示されず、問題なく SCEP 登録プロセスが開始されます。
補足 - 既存の MDM ベンダーを使用することは、ここではオプションではありません。
以下は私が使用しているプロファイルです。
<?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>PayloadContent</key>
<dict>
<key>Challenge</key>
<string>this is a challenge</string>
<key>Key Type</key>
<string>RSA</string>
<key>Key Usage</key>
<integer>5</integer>
<key>Keysize</key>
<integer>1024</integer>
<key>Name</key>
<string>mycompany</string>
<key>Retries</key>
<integer>3</integer>
<key>RetryDelay</key>
<integer>0</integer>
<key>Subject</key>
<array><array><array>
<string>CN</string>
<string>mycompany</string>
</array></array></array>
<key>URL</key>
<string>https://mysite.com/scep.aspx</string>
</dict>
<key>PayloadDescription</key>
<string>Configures SCEP</string>
<key>PayloadDisplayName</key>
<string>SCEP (mycompany)</string>
<key>PayloadIdentifier</key>
<string>com.mycompany.mdm.scep1</string>
<key>PayloadOrganization</key>
<string></string>
<key>PayloadType</key>
<string>com.apple.security.scep</string>
<key>PayloadUUID</key>
<string>57225d3d-0758-4d23-8093-e4d8c9bbd47c</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
<dict>
<key>AccessRights</key>
<integer>3</integer>
<key>CheckInURL</key>
<string>mysite.com/checkin.aspx</string>
<key>CheckOutWhenRemoved</key>
<false/>
<key>IdentityCertificateUUID</key>
<string>57225d3d-0758-4d23-8093-e4d8c9bbd47c</string>
<key>PayloadDescription</key>
<string>Configures MobileDeviceManagement.</string>
<key>PayloadIdentifier</key>
<string>com.mycompany.mdm.mdm2</string>
<key>PayloadOrganization</key>
<string></string>
<key>PayloadType</key>
<string>com.apple.mdm</string>
<key>PayloadUUID</key>
<string>ed0ae41d-1aa7-4721-9fe9-139c1072132c</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>ServerURL</key>
<string>https://mysite.com/checkin.aspx</string>
<key>SignMessage</key>
<false/>
<key>Topic</key>
<string>com.apple.mgmt.mypushsubject</string>
<key>UseDevelopmentAPNS</key>
<true/>
</dict>
</array>
<key>PayloadDescription</key>
<string>Profile description.</string>
<key>PayloadDisplayName</key>
<string>Test Profile</string>
<key>PayloadIdentifier</key>
<string>com.mycompany.mdm</string>
<key>PayloadOrganization</key>
<string>mycompany</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>13321058-4037-478c-9b1e-ef6f810065cb</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>