gpt4 book ai didi

iphone - 如何使用 Ruby 加密和签署 iphone 移动配置文件

转载 作者:数据小太阳 更新时间:2023-10-29 08:10:26 24 4
gpt4 key购买 nike

我有一个由 iphone 配置实用程序生成的 xml 格式(模板)的未签名 mobileconfig 文件。我想使用 openssl 对其进行加密和签名,并能够使用 Ruby on rails 将其安装在 iphone 上。我不想创建一个 SCEP 服务器来执行此操作,因为我想继续动态修改此模板 xml 文件并使用某些 URL 提供它。

提前感谢您的帮助。

我已经检查了以下问题,但不清楚如何加密可以在 iphone 上正确安装的文件 - 因为当我尝试模仿时,我不断收到“由于未知错误无法安装配置文件”通过仅加密部分并适本地附加/前置配置文件的其他部分,从 iphone 配置实用程序加密文件格式。

Signing iPhone Configuration XML Profile with Ruby on Rails

Apple 的这份手册很有用,但它更适合于创建 SCEP 服务器,而不是用于操作模板 mobileconfig 文件 -

http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/iPhoneOTAConfiguration/profile-service/profile-service.html

最佳答案

如果仍然有人在使用 Ruby 对配置文件进行签名和加密时遇到问题,那么以下答案会很有用。

我用过OpenSSL Ruby 和 Plist 中可用的模块 gem 。

考虑密码限制配置文件。

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 使用.

来自文档,

To encrypt a profile do the following:

  • Remove the PayloadContent array and serialize it as a proper plist.
  • Note that the top-level object in this plist is an array, not a dictionary.
  • CMS-encrypt the serialized plist as enveloped data. Serialize the encrypted data in DER format.
  • Set the serialized data as the value of as a Data plist item in the profile, using the key 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)

    将加密的payload内容添加到der格式的原始payload中

    passcode_payload['EncryptedPayloadContent'] = StringIO.new(encrypted_payload.to_der)

    **

    签署

    **

    signed_passcode_profile = OpenSSL::PKCS7.sign(SSL_CERTIFICATE, SSL_KEY, passcode_payload.to_plist, [], OpenSSL::PKCS7::BINARY)

    终于可以使用了

    send_data signed_passcode_profile.to_der, :type => "application/x-apple-aspen-config" 

    发送负载。

    关于iphone - 如何使用 Ruby 加密和签署 iphone 移动配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7087415/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com