iOS MDM注册configuration文件请求/configuration文件使用java签署证书

您好,我们正在尝试使用java创build一个iOS MDM服务器。 我被困在第一个要签署证书并发送SCEP的地方。 我首先将注册plist文件发送到ios设备。 作为响应,当我们从设备上点击“安装”时,从ios设备收到一个HttpServletRequest。

它使用包含configuration文件请求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> 

它包含登记过程中发送的“挑战”string。 它也给设备的UDID。 这部分是通过读取java中使用字节的请求的inputStream来获取的。

request.getInputStream包含的另一部分是Apple证书的pkcs签名证书详细信息,如下所示:

 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....JN...&.. 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>....... 

我没有复制整个文件,因为它是一个巨大的。 为了阅读这个部分,我使用了可从sun.security.pkcs包中获得的java的PKCS7。

我首先想读取“挑战”的价值,并使用挑战本身validation证书,因为这将是我们唯一确定的会话价值。 我只想把一个签名证书传回iOS设备,这样我就可以继续下去了。

请提供一个java代码,这将有助于parsing这个request.getInputStream。 请求的内容types是=“application / pkcs7-signature”我该如何回传响应。 我是否需要再次创build证书?

请帮忙。 希望我明确表示怀疑。 提前致谢。!!

让我试着把你的问题分解成多个子问题并回答。

我被困在第一个要签署证书并发送SCEP的地方。

坦率地说,我无法理解你在说什么。

基于你得到的回应,你是这样做的: https : //developer.apple.com/library/ios/documentation/networkinginternet/conceptual/iphoneotaconfiguration/OTASecurity/OTASecurity.html

你正在第二阶段,第一步。

我首先想读取“挑战”的价值,并使用挑战本身validation证书,因为这将是我们唯一确定的会话价值

再次。 我不是100%确定你的意思。 特别是“使用挑战本身validation证书”

在这个步骤你应该做两件事

  • 使用请求中的挑战提取对此请求进行身份validation
  • validation签名(确保它是正确的签名,并且由相应的Apple证书签名)。
  • 如果一切正确(challange和证书),那么你应该发送一个configuration文件与SCEP有效载荷或PKCS12有效载荷

请提供一个java代码,这将有助于parsing这个request.getInputStream。 为了阅读这个部分,我使用了可从sun.security.pkcs包中获得的java的PKCS7。

我会build议看看充气城堡 。 这是处理encryption的优秀库。

并search“充气城堡validation签名”:

使用Java和Bouncycastle进行X.509证书validation

http://www.nakov.com/blog/2009/12/01/x509-certificate-validation-in-java-build-and-verify-chain-and-verify-clr-with-bouncy-castle/