此問題與another question相同。在此重新發布答案,並進行一些修改!
我已經使用了OpenSSL模塊在Ruby和Plist寶石。
考慮一個密碼限制配置文件。
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
}
一般對於正常輪廓passcode_payload_content
進入passcode_payload['PayloadContent']
作爲字典的數組。
passcode_payload [ 'PayloadContent'] = [passcode_payload_content]
但是對於加密的輪廓,PayloadContent
應被刪除並EncryptedPayloadContent
應作爲每configuration profile key reference document。
問題1:從.mobileconfig輪廓實際上是加密的哪些數據進入(數據)..(/數據)的(鍵)EncryptedPayloadContent的部分從(/鍵)
商務部,
要加密配置文件執行以下操作:
取出PayloadContent
陣列和序列化作爲一個適當的plist。
請注意,此plist中的頂級對象是一個數組,而不是 字典。
CMS將序列化的plist加密爲封裝數據。 以DER格式序列化加密的數據。
設置串行化的數據作爲 作爲配置文件中的數據的plist項的值,使用在plist中鍵 EncryptedPayloadContent
由於頂層對象應當是數組
passcode_payload_content_array = [passcode_payload_content]
序列化爲合適的plist
to_be_encrypted_plist = passcode_payload_content_array.to_plist
加密證書有效內容conten噸,
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)
我不知道你會永遠能夠做到這一點,因爲你不能命令野生動物園嘗試之前解密您的配置文件將其導入系統鑰匙串。既然你提到safari,我假設你正在嘗試通過它來安裝配置文件。也許你可以將它們加密存儲在服務器上,根據請求進行解密(在HTML表單中輸入密鑰等),並通過SSL將解密後的版本發送到設備上? – Soup