将pkcs12插入mobileconfig文件

4
我该如何在.mobileconfig文件中插入.p12文件?
目前,苹果配置实用程序会对

.p12

文件执行某些未知的转换/编码操作,然后再将其插入到.mobileconfig(它只是一个XML文件)中。
我想直接创建一个XML文件来创建这个.mobileconfig文件,而不使用苹果iPhone配置实用程序。
谢谢
5个回答

6

实现这个的一种方法是对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;
}

1

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

我使用iPhone配置实用程序创建了配置文件。将.p12文件附加到配置文件后,以下内容将发生更改。

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

密码 password_value PayloadCertificateFileName certificate_name.p12 PayloadContent //从证书转换的数据

        </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>

抱歉,我之前并没有恰当地提出我的问题。我真正想做的是在不使用苹果iPhone配置工具的情况下创建这个.mobileconfig文件。 - Elison Niven
是的,我知道其他字段,但我该如何获取<key> PayloadContent的值?它不是pkcs12文件的简单base64编码。 - Elison Niven

1
除了Anil提到的步骤外,还需要从pkcs12证书中读取二进制数据,然后使用base64编码进行编码。您可以将该数据放入Anil提到的XML中。
<data>base64 encoded data
</data>

你的意思是从pkcs12文件中读取二进制数据吗? - Elison Niven
我假设您正在使用一些代码来生成XML文件。因此,我的意思是以编程方式读取pkcs12文件,然后对其进行base64编码,然后再将其放入XML中。 - Nilesh
是的,但输出与ACPU生成的不同。 - Elison Niven
你能提供更多关于这个问题的细节吗?你确定你的编码没有问题吗? - Nilesh
我已经尝试过了。在.mobileconfing文件中嵌入了base64编码的数据。它与IPCU创建的完全相同。 - Anand
显示剩余2条评论

1
我目前正在工作中处理此问题,部署脚本以生成 Mac OS 工作站的 n.mobileconfig 文件。
最好参考官方的苹果文档802.1X认证,因为他们提供了一个XML模板和相关说明。同时,mactls.sh在许多其他地方也被引用。我使用该模板来生成我的 mobileconfigs。
要获取 pkcs12 文件的 base64 内容,请将现有的 pkcs12 文件输入 openssl 中的 cat 命令。
B64PK12=$(cat ${PK12} | openssl enc -base64);

使用该变量插入到您的XML中,前提是您正在为移动配置文件使用模板。
起初我包含了RADIUS CA和解密后的PKCS12文件内容,只有CA被导入,尽管它没有进行base64编码。在对CA和pkcs12内容进行base64编码后,两者都添加到指定的钥匙串中。
希望这可以帮到您。

-5
你可以使用苹果脚本来创建包含 p12 的 mobileconfig。我已经成功地做到了,而且效果很好。很抱歉我不能分享代码,但我可以说它是有效的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接