Подпись подписчика Apple MDM-поставщика

Я ударил ' Недопустимый запрос подписи сертификата' при загрузке plist в https://identity.apple.com/pushcert/, а ниже - шаги я используется для генерации plist:

  • Как поставщик, создайте CSR поставщика с помощью KeyChain Access MacBook, чтобы загрузить в центр-член для создания сертификата подписи MDM и экспортировать закрытый ключ из KeyChain Access в формате p12, скажем, vendor.p12
  • Создайте клиентскую CSR, используя Openssl:
    - openssl genrsa -des3 -out customerPrivateKey.pem 2048
    - openssl req -new -key customerPrivateKey.pem -out customer.csr
  • В качестве поставщика загрузите сертификат подписи MDM, промежуточный сертификат WWDR из портала обеспечения и загрузите сертификат Apple root из http://www.apple.com/appleca/AppleIncRootCertificate.cer, затем используйте ниже команды для преобразования этих трех сертификатов в формат PEM один за другим, который будет считываться программой как PushCertCertificateChain:
    - openssl x509 -inform der -in AppleWWDRCA.cer -out chain.pem
  • В качестве поставщика, следуя образцу Java-кода в Справочнике по протоколу управления мобильными устройствами, я подписываю customer.csr с закрытым ключом, извлеченным из vendor.p12
  • Использование Safari для загрузки сгенерированного plist в https://identity.apple.com/pushcert/ с клиентом Apple ID

Что-то не так с вышеуказанными шагами? Пожалуйста, порекомендуйте. Большое спасибо!

Ответ 2

Я создал python script, который подписывает часть поставщика, поэтому вам не нужно использовать код Java.

https://github.com/grinich/mdmvendorsign

Ответ 3

следуя странице http://www.softhinker.com/in-the-news/iosmdmvendorcsrsigning, как поставщик Как поставщик,

  • создать CSR с помощью любого инструментария, то есть KeyChain Access на MacBook, затем экспортировать закрытый ключ как "vendor.p12"
  • войдите в Центр пользователей Apple и перейдите в "Портал обеспечения IOS".
  • выберите "Сертификаты" на левой панели навигации и нажмите вкладку "Другие" в центре.
  • следуйте инструкциям на этой странице и загрузите созданный CSR.
  • тогда сертификат для вас как поставщика MDM будет доступен для загрузки на вкладке "Другое". И загрузите его.
  • скачать промежуточный сертификат WWDR.
  • загрузить сертификат Apple root.
  • выполните команду 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-сервера.

Ответ 4

Пожалуйста, ознакомьтесь с моими заметками о подписке Apple MDM CSR ниже. Некоторые команды могут зависеть от стандартных инструментов linux и linux, но перенос на другие платформы должен быть тривиальным.

Подготовить необходимые сертификаты

Apple Root

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

Apple 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 CSR

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

... подготовиться к Apple

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>&-'