java - iOS MDM 注册配置文件请求/profile 使用 java 签署证书

标签 java ios mdm

您好,我们正在尝试使用 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 步。

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

再次。我不是 100% 确定你的意思。具体来说是“使用质询本身来验证证书”

在此步骤中您应该做两件事

  • 使用请求中的质询摘录来验证此请求
  • 验证签名(确保签名正确且由适当的 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 验证签名”:

X.509 Certificate validation with Java and Bouncycastle

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

关于java - iOS MDM 注册配置文件请求/profile 使用 java 签署证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25037650/

相关文章:

java 。如何通过远程 channel 连接到远程Websphere MQ?

Java 泛型 - 不兼容的类型 必需 :java. io.filedescriptor 找到 :java. lang.object

ios - Xcode 内存图调试图标未显示

ios - 以编程方式禁用 iOS "Perspective Compensation"?

php - 登录paypal账户后无法看到我的应用页面

android - 有没有办法获取所有可用操作系统当前运行的前台应用程序(包)?

python - 拥有 iOS MDM 服务器

java - 无法打印读取的整数: java

java - 不断更新textView

java - 为什么 java8 服务器 JRE 不包含服务器特定工具,如 jstack、jmap、jvisualvm、jstat