13

在将 plist 上传到https://identity.apple.com/pushcert/时,我点击了“无效的证书签名请求” ,以下是我用来生成 plist 的步骤:

  1. 作为厂商,使用 MacBook 的 KeyChain Access 创建厂商 CSR 上传到会员中心生成 MDM 签名证书,并从 KeyChain Access 中导出 p12 格式的私钥,比如 vendor.p12
  2. 使用 Openssl 创建客户 CSR:
    - openssl genrsa -des3 -out customerPrivateKey.pem 2048
    - openssl req -new -key customerPrivateKey.pem -out customer.csr
  3. 作为供应商,从供应门户下载 MDM 签名证书、WWDR 中间证书,并从http://www.apple.com/appleca/AppleIncRootCertificate.cer下载 Apple 根证书,然后使用以下命令将这三个证书转换为 PEM 格式程序将一一读取为 PushCertCertificateChain :
    - openssl x509 -inform der -in AppleWWDRCA.cer -out chain.pem
  4. 作为供应商,按照移动设备管理协议参考中的示例 java 代码,我使用从 vendor.p12 中提取的私钥签署 customer.csr
  5. 使用 Safari使用客户 Apple ID将生成的 plist 上传到https://identity.apple.com/pushcert/

以上步骤有什么问题吗?请指教。非常感谢!

4

4 回答 4

4

在此处查看详细步骤和源代码以生成 plist。

于 2011-12-19T07:12:09.797 回答
3

我制作了一个执行供应商签名部分的 python 脚本,因此您不必使用 java 代码。

https://github.com/grinich/mdmvendorsign

于 2013-04-23T22:49:27.173 回答
2

在关注页面http://www.softhinker.com/in-the-news/iosmdmvenendorcsrsigning时,作为供应商作为供应商,

  • 使用任何工具包创建 CSR,即 MacBook 上的 KeyChain Access,然后将私钥导出为“vendor.p12”
  • 登录 Apple 会员中心,然后转到“iOS 配置门户”
  • 选择左侧导航栏上的“证书”,然后单击中心的“其他”选项卡。
  • 按照该页面上的说明,上传您创建的 CSR。
  • 那么您作为 MDM 供应商的证书将可在“其他”选项卡上下载。并下载它。
  • 下载 WWDR 中间证书。
  • 下载苹果根证书。
  • 执行下面的 openssl 命令,将 MDM 厂商证书、WWDR 证书、Apple 根证书一一转换为 PEM 格式:

    openssl x509 -inform der -in mdm_identity.cer -out mdm.pem

    openssl x509 -inform der -in AppleWWDRCA.cer -out middle.pem

    openssl x509 -inform der -in AppleIncRootCertificate.cer -out root.pem

然后使用http://www.softhinker.com/in-the-news/iosmdmvendorcsrsigning中附带的 Java 程序生成编码的 plist。现在首先验证生成的 plist.xml 格式应该与 MDM 协议参考文档中提供的示例 plist.xml 匹配。

如果 plist.xml 格式合适,则将 encoded_plist 上传到https://identity.apple.com/pushcert/。所以我们需要注意 plist.xml 仅供我们参考,而不是用于上传。仅用于上传 encoded_plist。

  • 请记住用您自己的占位符替换包中的占位符,因为 java 包中提供的只是示例之一(零大小):

    customer.der、vendor.p12、mdm.pem、intermediate.pem、root.pem


如果我们正在进行客户活动来为 MDM 服务器生成 MDM 证书

作为客户,

  • 使用任何工具包创建 CSR,即 openssl :

    openssl genrsa -des3 -out customerPrivateKey.pem 2048

    openssl req -new -key customerPrivateKey.pem -out customer.csr

  • 将 customer.csr 转换为 der 格式:

    openssl req -inform pem -outform der -in customer.csr -out customer.der

那么我们需要验证几件事。

1) 使用此命令从 customerPrivateKey.pem 中删除密码

openssl rsa -in customerPrivateKey.pem -out PlainKey.pem

2)然后使用此命令合并从门户https://identity.apple.com/pushcert/下载的您的 APNS 证书(例如 CustomerCompanyName.pem)

cat CustomerCompanyName.pem PlainKey.pem > PlainCert.pem

现在,这个 PlainCert.pem 文件可以在您的服务器中用作 APNS/MDM 证书,如示例 MDM 服务器的MDM_Protocol pdf 中所述。

于 2012-06-15T04:00:05.617 回答
1

请参阅下面关于 Apple 供应商 MDM CSR 签名的说明。有些命令可能依赖于 linux 和 linux 标准工具,但移植到其他平台应该是微不足道的。

准备所需的证书

苹果根

wget https://www.apple.com/appleca/AppleIncRootCertificate.cer
openssl x509 -inform DER -outform PEM -in AppleIncRootCertificate.der -out AppleIncRootCertificate.pem
openssl x509 -fingerprint -sha256 -noout -in AppleIncRootCertificate.pem
# SHA256 Fingerprint=B0:B1:73:0E:CB:C7:FF:45:05:14:2C:49:F1:29:5E:6E:DA:6B:CA:ED:7E:2C:68:C5:BE:91:B5:A1:10:01:F0:24
openssl x509 -fingerprint -noout -in AppleIncRootCertificate.pem
# SHA1 Fingerprint=61:1E:5B:66:2C:59:3A:08:FF:58:D1:4A:E2:24:52:D1:98:DF:6C:60

苹果WWDR

wget https://developer.apple.com/certificationauthority/AppleWWDRCA.cer
openssl x509 -inform DER -outform PEM -in AppleWWDRCA.der -out AppleWWDRCA.pem
openssl verify -verbose -CAfile AppleIncRootCertificate.pem AppleWWDRCA.pem

供应商 MDM 企业社会责任

openssl genrsa -out apple-mdm-csr.key 2048
openssl req -new -key apple-mdm-csr.key -subj '/CN=MDM' -out apple-mdm-csr.csr
# GET apple-mdm-csr.der ('https://developer.apple.com/' -> 'Account' -> 'Certificates, IDs & Profiles')
openssl x509 -inform DER -outform PEM -in apple-mdm-csr.cer -out apple-mdm-csr.pem
openssl verify -verbose -CAfile AppleIncRootCertificate.pem -untrusted AppleWWDRCA.pem apple-mdm-csr.pem

客户 CSR(为客户现场生成)

#openssl genrsa -out customer.key 2048
#openssl req -new -key customer.key -subj '/CN=MDM' -out customer.csr

签署客户CSR

openssl req -inform PEM -outform DER -in customer.csr -out customer.csr.der
openssl sha1 -sign apple-mdm-csr.key -out customer.csr.der.sig customer.csr.der

...为苹果做准备

base64 -w0 customer.csr.der >customer.csr.der.b64
base64 -w0 customer.csr.der.sig >customer.csr.der.sig.b64

cat <<EOF >customer.plist
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>PushCertCertificateChain</key>
        <string>
            $(<apple-mdm-csr.pem)
            $(<AppleWWDRCA.pem)
            $(<AppleIncRootCertificate.pem)
        </string>
        <key>PushCertRequestCSR</key>
        <string>
            $(<customer.csr.der.b64)
        </string>
        <key>PushCertSignature</key>
        <string>
            $(<customer.csr.sig.b64)
        </string>
    </dict>
    </plist>
EOF

base64 -w0 customer.plist >customer.plist.b64

总结(多合一)

bash -e -c '
# Take CSR from STDIN and output base64 encoded plist for Apple
APPLE_MDM_CSR_CRT="apple-mdm-csr.pem"
APPLE_MDM_CSR_KEY="apple-mdm-csr.key"
APPLE_INTERMEDIATE_CRT="AppleWWDRCA.pem"
APPLE_ROOT_CRT="AppleIncRootCertificate.pem"
CUSTOMER_CSR_DER="/proc/self/fd/3"

TMP="$(mktemp -p /run)"
exec 3<> "$TMP"
rm -f "$TMP"

openssl req -inform PEM -outform DER -out "$CUSTOMER_CSR_DER"

base64 -w0 <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PushCertCertificateChain</key>
<string>
$(<$APPLE_MDM_CSR_CRT)
$(<$APPLE_INTERMEDIATE_CRT)
$(<$APPLE_ROOT_CRT)
</string>
<key>PushCertRequestCSR</key>
<string>$(base64 -w0 "$CUSTOMER_CSR_DER")</string>
<key>PushCertSignature</key>
<string>$(openssl sha1 -sign "$APPLE_MDM_CSR_KEY" "$CUSTOMER_CSR_DER" | base64 -w0)</string>
</dict>
</plist>
EOF

exec 3>&-'
于 2018-01-05T14:14:16.950 回答