Привет, мы пытаемся создать сервер MDM iOS с помощью java. Я застрял в самом первом месте, где мы должны подписать сертификат и отправить SCEP. Сначала я отправил файл pl зачисления на устройство ios. В ответ на это я получаю HttpServletRequest с устройства ios, когда мы нажимаем "Установить" с устройства.
Он использует URL-адрес, который содержит URL-адрес запроса профиля, и запрос получен для него в java. Прочитав request.getInputStream, я узнал, что запрос состоит из двух частей. Один - это plist, другой - сертификат устройства.
печать файла я получил ниже 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>CHALLENGE</key>
<string>challengesessionvalue1234</string>
<key>UDID</key>
<string>b3d8980d72a6c2abf4f936862e8c50a734ccc030</string>
</dict>
</plist>
Он содержит строку "Challenge", которая была отправлена во время регистрации. Также он дает UDID устройства. Эта часть была получена путем чтения входного потока запроса в java с использованием байтов.
Другая часть, содержащая request.getInputStream, - это подписанная pkcs информация сертификата сертификата Apple, как показано ниже:
PKCS7 :: signer infos:
0. Signer Info for (issuer): CN=Apple iPhone Device CA, OU=Apple iPhone, O=Apple Inc., C=US
version: 01
certificateSerialNumber: 0252f631 cadff5f3 99986
digestAlgorithmId: SHA
authenticatedAttributes: PKCS9 Attributes: [
[ContentType: 1.2.840.113549.1.7.1];
[MessageDigest: 0000: E1 BF 36 1B 11 5C CB 0E E6 1C 57 4F 09 FC 55 B4 ..6..\....WO..U.
0010: D9 C1 E0 1E ....
];
[SigningTime: Wed Jul 30 11:46:02 UTC 2014]
] (end PKCS9 Attributes)
digestEncryptionAlgorithmId: RSA
encryptedDigest:
0000: C5 11 AC 76 89 E7 43 BD A3 03 5F 14 4B 08 BD E4 ...v..C..._.K...
0010: 5E F9 55 BA A7 F5 4E 43 E0 74 FD 06 D2 E2 88 03 ^.U...NC.t......
0020: C4 9C 88 A2 01 E0 9C 63 62 C2 D9 1A BD FC 00 B3 .......cb.......
0030: 64 30 8F 00 BD F4 4A B9 4E EA D5 C6 7B 26 1C 01 d0....J.N....&..
0040: A5 E2 B7 27 B9 7A A8 2D 22 97 E3 D9 24 7B 8B 24 ...'.z.-"...$..$
0050: 84 49 7C 38 1B A7 56 80 B8 CD 1A 44 9C AF 79 D9 .I.8..V....D..y.
0060: 86 12 B5 31 D1 BD 5C 27 F6 64 BC EC DC 02 19 A5 ...1..\'.d......
0070: 25 A5 09 F2 BB 11 67 78 3E DC D4 03 F2 E4 8D C0 %.....gx>.......
Я не копировал весь файл, поскольку он был огромным. Чтобы прочитать эту часть, я использовал PKCS7 для java из пакета sun.security.pkcs.
Сначала я хотел бы прочитать значение "Challenge" и аутентифицировать сертификат, используя сам вызов, так как это будет уникальное значение сеанса для нас. Я просто хочу передать сертификат знака на устройство iOS, чтобы продолжить.
Укажите код java, который поможет разобрать этот request.getInputStream. Тип содержимого запроса = "application/pkcs7-signature" И как мне передать ответ. Нужно ли снова создавать сертификат?
Пожалуйста помоги. Надеюсь, я убедился в сомнении. Заранее спасибо.!!
Позвольте мне попытаться сломать ваш вопрос на несколько подзапросов и ответить.
Я застрял в самом первом месте, где мы должны подписать сертификат и отправить SCEP.
Честно говоря, я не мог понять, о чем вы говорите.
Основываясь на полученном вами ответе, вы делаете это: https://developer.apple.com/library/ios/documentation/networkinginternet/conceptual/iphoneotaconfiguration/OTASecurity/OTASecurity.html
И вы на втором этапе, шаг 1.
Сначала я хотел бы прочитать значение "Challenge" и аутентифицировать сертификат, используя сам вызов, так как это будет уникальное значение для сеанса для нас
Еще раз. Я не уверен на 100%, что вы имеете в виду. В частности, "аутентифицировать сертификат, используя сам вызов"
Вы должны сделать две вещи на этих шагах
Укажите код java, который поможет разобрать этот request.getInputStream. Чтобы прочитать эту часть, я использовал PKCS7 для java из пакета sun.security.pkcs.
Я бы рекомендовал посмотреть на замок Бунси. Это отличная библиотека, которая обрабатывает криптографию.
И найдите "Баунси замок подтвердите подпись":