您好,我们正在尝试使用 java 创建 iOS MDM 服务器。 我陷入了必须签署证书并发送 SCEP 的第一点。 我首先将 enroll plist 文件发送到 ios 设备。作为响应,当我们从设备上单击“安装”时,我会收到来自 ios 设备的 HttpServletRequest。
它使用包含配置文件请求 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>
它包含注册期间发送的“挑战”字符串。它还提供设备 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....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>.......
我没有复制整个文件,因为它很大。为了阅读这部分,我使用了 sun.security.pkcs 包中可用于 java 的 PKCS7。
我首先想读取“挑战”值并使用挑战本身对证书进行身份验证,因为它将成为我们唯一标识的 session 值。我只想将签名证书传回 iOS 设备,以便我可以进一步进行。
请提供一个java代码来帮助解析这个request.getInputStream。 请求的内容类型为=“application/pkcs7-signature” 我应该如何传回响应。我需要重新创建证书吗?
请帮忙。 希望我能澄清自己的疑问。 提前致谢。!!
最佳答案
让我尝试将您的问题分解为多个子问题并回答。
I am stuck at the very first point where we have to sign the certificate and send an SCEP.
坦白说,我没听懂你在说什么。
根据您收到的回复,您正在执行以下操作: https://developer.apple.com/library/ios/documentation/networkinginternet/conceptual/iphoneotaconfiguration/OTASecurity/OTASecurity.html
您现在处于第 2 阶段的第 1 步。
再次。我不是 100% 确定你的意思。具体来说是“使用质询本身来验证证书”I would first like to read the "Challenge" value and authenticate the certificate using challenge itself as it will be a uniquely identified session value for us
在此步骤中您应该做两件事
- 使用请求中的质询摘录来验证此请求
- 验证签名(确保签名正确且由适当的 Apple 证书签名)。
- 如果一切正确(挑战和证书),那么您应该发送带有 SCEP 负载或 PKCS12 负载的配置文件
Please provide a java code which will help in parse this request.getInputStream. To read this part i used PKCS7 available for java from sun.security.pkcs package.
我建议查看 Bouncy Castle 。这是处理加密的优秀库。
并搜索“Bouncy caSTLe 验证签名”:
关于java - iOS MDM 注册配置文件请求/profile 使用 java 签署证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25037650/