【问题标题】:Insert pkcs12 to mobileconfig file将 pkcs12 插入 mobileconfig 文件
【发布时间】:2012-03-01 11:14:11
【问题描述】:

如何在.mobileconfig 文件中插入.p12 文件?

Apple 配置实用程序当前对 .p12 文件执行一些未知的转换/编码,同时将其插入 .mobileconfig(它只是一个 XML 文件)。

我想通过直接创建 XML 文件来创建此 .mobileconfig 文件,而不使用 Apple iPhone 配置实用程序。

谢谢

【问题讨论】:

    标签: iphone ios xml ssl-certificate pkcs#12


    【解决方案1】:

    实现此目的的一种方法是对 PKCS#12 文件进行 base64 编码。例如,这适用于 PHP

    openssl_pkcs12_export( $strCertPEM, $strCertPkcs12, $resKey, $strCertPW );    
    $arrCertBase64 = str_split( base64_encode($strCertPkcs12), 52);
    $xmlUserCertPlist = plistVar('PayloadContent',$arrCertBase64,'data');
    
    function plistVar($key,$var,$type)
    {
      //...snip...
      if ( $type == 'data' ) return plistData($key,$var);
      //...snip...
    }
    
    function plistData($key,$arr)
    {
      //...snip...
      $xml = "<key>". $key ."</key>\n";
      $xml .= "<data>\n";
      foreach ($arr as $val) { $xml .= $val."\n"; }
      $xml .= "</data>\n";
      return $xml;
    }
    

    【讨论】:

      【解决方案2】:

      如果您想在 iphone 配置文件中插入 .p12 文件,您只需在所选配置文件的 iphone 配置实用程序上选择凭据选项卡。当您 时,它将 附加到 .mobileConfig 文件上。

      我使用 iphone 配置实用程序创建了配置文件。当您将 .p12 文件附加到配置文件中时,以下内容将发生变化。

      创建 .mobileconfig 文件后,以下字典将附加到 xml 文件中

      密码 密码值 有效负载证书文件名 证书名称.p12 有效载荷内容 //从证书转换的数据

              </data>
              <key>PayloadDescription</key>
              <string>Provides device authentication (certificate or identity).</string>
              <key>PayloadDisplayName</key>
              <string>Certificate_name.p12</string>
              <key>PayloadIdentifier</key>
              <string>company.Identifier</string>
              <key>PayloadOrganization</key>
              <string>Company name</string>
              <key>PayloadType</key>
              <string>com.apple.security.pkcs12</string>
              <key>PayloadUUID</key>
              <string>UUId of the device</string>
              <key>PayloadVersion</key>
              <integer>1</integer>
          </dict>
      

      【讨论】:

      • 糟糕,抱歉,我的问题没有正确提出。我真正想做的是在不使用 Apple iPhone 配置实用程序的情况下创建这个 .mobileconfig 文件。
      • 是的,我知道其他字段,如何获取 PayloadContent 的值?不是pkcs12文件的简单base64。
      【解决方案3】:

      除了Anil提到的步骤,从pkcs12证书中读取二进制数据,然后 使用 base64 编码对其进行编码。您可以将这些数据放在 Anil 提到的 xml 中。

      <data>base64 encoded data
      </data>
      

      【讨论】:

      • 从 pkcs12 文件中读取二进制数据到底是什么意思?
      • 我假设您正在使用一些代码来生成 xml 文件。所以我的意思是以编程方式读取 pkcs12 文件,然后在将其放入 xml 之前对其进行 base64 编码。
      • 可以,但是输出和ACPU生成的不一样
      • 您能否提供有关该问题的更多详细信息?你确定你的编码没有问题吗?
      • 我正在尝试创建一个 VPN 配置文件,其中包含 2 个证书,1 个用于 CA,1 个用于用户。我使用 ACPU 创建了这个配置文件。 ACPU 创建的配置文件中的 CA 证书 PayloadContent 等于简单的cat ca.crt。我无法了解 ACPU 如何为用户证书放置 PayloadContent。我使用 openssl 进行了 base64 编码,但它不匹配。我很确定我的编码没有问题。
      【解决方案4】:

      我现在正好在我目前的职位上解决这个问题,部署脚本来为 Mac OS 工作站生成 n.mobileconfig 文件。

      参考802.1X Authentcation 上的 Apple 官方文档会有所帮助,因为它们确实提供了 XML 模板和相关说明。 此外,在许多其他地方引用的是mactls.sh。我使用该模板来生成我的移动配置。

      要获取pkcs12文件的base64内容,将现有的pkcs12文件cat成openssl:

      B64PK12=$(cat ${PK12} | openssl enc -base64);
      

      使用该变量插入到您的 XML 中,前提是您使用的是 mobileconfig 文件的模板。

      我最初包含了 RADIUS CA 和解密的 PKCS12 文件内容,只导入了 CA,尽管它没有经过 base64 编码。在对 CA 和 pkcs12 内容进行 base64 编码后,将两者都添加到指定的 Keychain 中。

      希望这会有所帮助。

      【讨论】:

        【解决方案5】:

        您可以使用苹果脚本来创建包含 p12 的 mobileconfig。我已经能够做到,而且效果很好。恐怕我不能分享代码,但我可以说它有效。

        【讨论】:

          猜你喜欢
          • 2015-09-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-29
          • 1970-01-01
          • 2020-07-22
          • 2016-01-19
          • 2012-01-15
          相关资源
          最近更新 更多