この質問は別の質問と同じです。いくつかの変更を加えて、ここに回答を再投稿してください!
Ruby とPlist gemで利用可能なOpenSSLモジュールを使用しました。
パスコード制限プロファイルを検討してください。
passcode_payload ={
'PayloadUUID' => 'RANDOM_STRING_UUID',
'PayloadOrganization' => 'PayloadOrganization',
'PayloadVersion' => 1,
'PayloadIdentifier' => 'com.test.PayloadIdentifier',
'PayloadType' => 'Configuration',
'PayloadDisplayName' => 'PayloadDisplayName',
'PayloadRemovalDisallowed' => false
}
passcode_payload_content = {
'PayloadDescription' => 'PayloadDescription',
'PayloadDisplayName' => 'PayloadDisplayName',
'PayloadIdentifier' => 'PayloadIdentifier',
'PayloadOrganization' => 'PayloadOrganization',
'PayloadType' => 'com.apple.mobiledevice.passwordpolicy',
'PayloadUUID' => "RANDOM_STRING_UUID",
'PayloadVersion' => 1,
'allowSimple' => true,
'forcePIN' => true
'maxPINAgeInDays' => 20,
'minComplexChars' => 1,
'minLength' => 4,
'requireAlphanumeric' => true
}
通常、通常のプロファイルの場合、辞書の as 配列にpasscode_payload_content
入ります。passcode_payload['PayloadContent']
passcode_payload['PayloadContent'] = [passcode_payload_content]
ただし、暗号化されたプロファイルの場合は、PayloadContent
を削除し 、構成プロファイル キー リファレンス ドキュメントEncryptedPayloadContent
に従って使用する必要があります。
質問 1: (key) EncryptedPayloadContent (/key) の (data)..(/data) セクションに入る、.mobileconfig プロファイルのどのデータが実際に暗号化されるか
ドキュメントから、
プロファイルを暗号化するには、次の手順を実行します。
配列を削除PayloadContent
し、適切な plist としてシリアル化します。
この plist の最上位オブジェクトは配列であり、辞書ではないことに注意してください。 シリアル化された plist をエンベロープ データとして CMS 暗号化します。暗号化されたデータを DER 形式でシリアル化します。 キーを使用して、シリアル化されたデータをプロファイルのデータ plist アイテムの値として設定します。
EncryptedPayloadContent
plist の最上位オブジェクトは配列でなければならないため
passcode_payload_content_array = [passcode_payload_content]
適切な plist へのシリアル化
to_be_encrypted_plist = passcode_payload_content_array.to_plist
証明書ペイロード コンテンツの暗号化、
device_certificate = OpenSSL::X509::Certificate.new File.read('deviceIdentityCertificate.pem')
encrypted_payload = OpenSSL::PKCS7.encrypt([device_certificate],to_be_encrypted_plist, OpenSSL::Cipher::Cipher::new("des-ede3-cbc"),OpenSSL::PKCS7::BINARY)
質問 2: データはバイナリ形式 (.der) または base64 でエンコードされていますか?
暗号化されたペイロード コンテンツを元のペイロードに der 形式で追加する
passcode_payload['EncryptedPayloadContent'] = StringIO.new(encrypted_payload.to_der)