Ответ 1
Здесь вы можете найти подробные шаги и исходный код для создания plist.
Я ударил ' Недопустимый запрос подписи сертификата' при загрузке plist в https://identity.apple.com/pushcert/, а ниже - шаги я используется для генерации plist:
Что-то не так с вышеуказанными шагами? Пожалуйста, порекомендуйте. Большое спасибо!
Здесь вы можете найти подробные шаги и исходный код для создания plist.
Я создал python script, который подписывает часть поставщика, поэтому вам не нужно использовать код Java.
следуя странице http://www.softhinker.com/in-the-news/iosmdmvendorcsrsigning, как поставщик Как поставщик,
выполните команду openssl, чтобы конвертировать сертификат поставщика MDM, сертификат WWDR и корневой сертификат Apple в формат PEM один за другим:
openssl x509 -inform der -in mdm_identity.cer -out mdm.pem
openssl x509 -inform der -in AppleWWDRCA.cer -out intermediate.pem
openssl x509 -inform der -in AppleIncRootCertificate.cer -out root.pem
Затем используйте прилагаемую программу Java в http://www.softhinker.com/in-the-news/iosmdmvendorcsrsigning для генерации закодированного plist. Теперь сначала проверьте сгенерированный формат plist.xml, который должен соответствовать образцу plist.xml, предоставленному в документе Справочника по протоколу MDM.
Если plist.xml находится в соответствующем формате, загрузите encoded_plist в https://identity.apple.com/pushcert/. Поэтому нам нужно позаботиться о том, чтобы plist.xml был просто для нашей справки, это не для upload.For только для загрузки только encoded_plist.
не забудьте заменить местозаполнитель в пакете вашими собственными, потому что предоставленный в пакете java просто образец один (нулевой размер):
client.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) Затем слейте свой APNS-сертификат (например, CustomerCompanyName.pem), загруженный с портала https://identity.apple.com/pushcert/ с помощью этой команды
cat CustomerCompanyName.pem PlainKey.pem > PlainCert.pem
Теперь этот файл PlainCert.pem может использоваться на вашем сервере как сертификат APNS/MDM, как указано в MDM_Protocol pdf для примера MDM-сервера.
Пожалуйста, ознакомьтесь с моими заметками о подписке 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
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
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
#openssl genrsa -out customer.key 2048
#openssl req -new -key customer.key -subj '/CN=MDM' -out customer.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>&-'