Apple iOS MDM 服务器设置设备注册/配置

Posted

技术标签:

【中文标题】Apple iOS MDM 服务器设置设备注册/配置【英文标题】:Apple iOS MDM Server Setup Device Enrollment/Configuration 【发布时间】:2013-01-25 05:45:46 【问题描述】:

我们正在尝试设置我们自己的内部 ios MDM 服务器,但我们遇到了一些问题,即根据 Apple 文档,我们看到的内容不一定与我们的预期相符。

按照 Apple 网站上的说明,我们设置了一个网页,用户可以在其中通过点击链接注册他们的设备。此链接会导致设备通过“设备注册过程”,如 Apple“无线配置文件交付和配置”文档的图 1.1 所示:https://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/iPhoneOTAConfiguration/Introduction/Introduction.html

我们的问题是: 在上述文档中的第 3 阶段(设备配置)开始之前,我们的一切都按预期运行。但是,当我们查看 Web 服务器和设备之间的流量时,注册流程似乎执行了两次。根据文档,这些是我们希望看到的服务器调用:

/enroll
/scep?operation=GetCACert&message=EnrollmentCAInstance
/scep?operation=GetCACaps&message=EnrollmentCAInstance
/scep?operation=PKIOperation&message=MII.....AAA

但是,实际上,我们看到该调用块执行了两次,一个接一个地执行,数据看似相同。有没有人看到这种行为,这是意料之中的吗?

一个更紧迫的问题是,在第 2 阶段、第 3 步执行后,我们将生成的证书传递给设备,设备安装成功。但是,根据文档,此时我们应该从设备获得响应,我们可以使用新的配置文件以及我们想要在设备上设置的设置来回复它。然而,我们从来没有得到那个回应,即使到那时为止的一切似乎都已成功完成。 有谁知道为什么没有发送响应,或者当时可能出了什么问题?

提前致谢,

使用 iphone 配置实用程序检索的设备日志:

<Notice>: (Note ) MC: Profile “com.test.profileservice.scep” queued for installation.
<Notice>: (Note ) MC: Checking for MDM installation...
<Notice>: (Note ) MC: ...finished checking for MDM installation.
<Notice>: (Note ) MC: Enrolling in OTA Profile service...
<Error>: Jan 25 16:34:13  SecTrustEvaluate  [leaf AnchorTrusted]
<Error>: Jan 25 16:34:14  SecTrustEvaluate  [leaf AnchorTrusted]
<Notice>: (Note ) MC: Attempting to retrieve issued certificate...
<Notice>: (Note ) MC: Issued certificate received.
<Notice>: (Note ) MC: Retrieving profile from OTA Profile service...
<Notice>: (Note ) MC: Received final profile: Test Config
<Notice>: (Note ) MC: Beginning profile installation...
<Error>: Jan 25 16:34:17  SecTrustEvaluate  [leaf AnchorTrusted]
<Notice>: (Note ) MC: Attempting to retrieve issued certificate...
<Notice>: (Note ) MC: Issued certificate received.
<Notice>: (Note ) MC: Profile “Test Config” installed.
<Error>: Checking for changed log settings
<Error>: valid 0 value 0
<Error>: Verbose logging disabled
<Notice>: (Note ) MC: mc_mobile_tunnel starting.
<Notice>: (Note ) MC: mc_mobile_tunnel shutting down.

发送到 MDM 服务器的完整请求流:

/enroll
/checkin
/scep?operation=GetCACert&message=EnrollmentCAInstance
/scep?operation=GetCACaps&message=EnrollmentCAInstance
/scep?operation=PKIOperation&message=MII.....AAA
/checkin
/scep?operation=GetCACert&message=EnrollmentCAInstance
/scep?operation=GetCACaps&message=EnrollmentCAInstance
/scep?operation=PKIOperation&message=MII.....AAA

添加作为 SCEP 配置的一部分发回的有效负载:

<plist version="1.0">
  <dict>
    <key>PayloadVersion</key>
    <integer>1</integer>
    <key>PayloadUUID</key>
    <string>Ignored</string>
    <key>PayloadType</key>
    <string>Configuration</string>
    <key>PayloadIdentifier</key>
    <string>Test Config</string>
    <key>PayloadDisplayName</key>
    <string>Test Profile:SCEP</string>
    <key>PayloadContent</key>
    <array>
      <dict>
        <key>PayloadContent</key>
        <dict>
          <key>URL</key>
          <string>https://test.com/mdm_scep</string>
          <key>Name</key>
          <string>EnrollmentCAInstance</string>
          <key>Subject</key>
          <array>
            <array>
              <array>
                <string>O</string>
                <string>Test Organization, Inc.</string>
              </array>
            </array>
            <array>
              <array>
                <string>CN</string>
                <string>test.com</string>
              </array>
            </array>
          </array>
          <key>Challenge</key>
          <string>DummyChallenge</string>
          <key>Keysize</key>
          <integer>1024</integer>
          <key>Key Type</key>
          <string>RSA</string>
          <key>Key Usage</key>
          <integer>5</integer>
        </dict>
        <key>PayloadDescription</key>
        <string>Provides device encryption identity</string>
        <key>PayloadUUID</key>
        <string>12345678-1234-1234-1234-123456789012</string>
        <key>PayloadType</key>
        <string>com.apple.security.scep</string>
        <key>PayloadDisplayName</key>
        <string>Encryption Identity</string>
        <key>PayloadVersion</key>
        <integer>1</integer>
        <key>PayloadOrganization</key>
        <string>Test Organization, Inc.</string>
        <key>PayloadIdentifier</key>
        <string>com.test.profileservice.scep</string>
      </dict>
    </array>
  </dict>
</plist>

【问题讨论】:

你能告诉我你是如何创建 mdm 注册配置文件的吗? 【参考方案1】:

回答您关于两个 SCEP 块执行的问题。

请看一下这个问题: Update an expired iOS MDM profile

在答案中,我描述了为什么设备会进行两次 SCEP 调用。这是按设计(没有错)。

关于第 2 阶段第 3 步的问题。请问 a)在您的问题中添加对服务器的调用的完整打印输出 b) 设备日志

在使用 MDM 时,我发现如果没有这两条信息,几乎不可能对其进行故障排除。

-- 更新 1--

正确的调用顺序如下

OTA 部分协议

/注册 返回:第一个请求 UDID、IMEI 等的配置文件

/profile 输入:iOS设备私钥签名的UDID、IMEI等/ 返回:带有 SCEP 有效负载的配置文件

/scep?operation=GetCACert&message=EnrollmentCAInstance

/scep?operation=GetCACaps&message=EnrollmentCAInstance

/scep?operation=PKIOperation&message=MII.....AAA

这是 SCEP 要求设备获取用于 OTA 部分的标识 返回:OTA身份证明。

/profile

输入:UDID、IMEI 等由与 OTA 证书关联的私钥签名 返回:带有 SCEP 负载 + MDM 负载的配置文件

/scep?operation=GetCACert&message=EnrollmentCAInstance

/scep?operation=GetCACaps&message=EnrollmentCAInstance

/scep?operation=PKIOperation&message=MII.....AAA

这是 SCEP 要求设备获取用于 MDM 部分的标识 返回:MDM 身份证书。

协议的 MDM 部分

/签到 输入:签入请求 返回:HTTP 代码 200

如您所见,它与您所拥有的非常不同。 您是否按照 [OTA 交付和配置][1] 中的描述实现了所有功能? 真的很难猜出哪里出了问题,因为看起来“/profile”用法的整个部分都丢失了。

我建议从头开始,确保对服务器的每次调用都按照描述的顺序完成并返回描述的返回配置文件。

【讨论】:

嗨@victor-ronin,感谢您的回复。我编辑了原始问题,其中包含从设备发送到我们的测试 MDM 服务的完整请求集,以及我们从 iphone 配置实用程序控制台获得的日志。但是,从日志中,我们在安装配置文件后看不到任何错误(这似乎至少是由配置文件配置引起的)。看来一切都顺利完成了。 我还要感谢您提供的信息:两个 SCEP 块;我们想知道为什么会这样,所以你的帖子很有意义。 感谢您的回复。只是为了清楚,苹果文档在哪里使用 /profile,我们有 /checkin,这可能有点令人困惑。我们将尝试重新设置它,以确保我们没有遗漏任何东西,如果我们仍然看到同样的问题,我们会通知您。 如果您使用“/checkin”而不是“/profile”,那么您应该检查在设备第二次联系/checkin 时发送什么配置文件。它应该是 MDM 有效负载 + SCEP 有效负载。在这种情况下,第二个 scep 请求会在正确的时间发生,唯一缺少的是调用 MDM 签入。 嗨@victor。当我们浏览我们的服务器代码时,我们看到了我们的错误在哪里。基本上,它没有获取组合的 scep+mdm 配置文件,而是始终只发送 scep 有效负载,这就是为什么当我们查看设备上的配置文件时,我们只看到证书信息,而不是 MDM 信息。一旦我们正确设置它以发送同时具有 SCEP + MDM 信息的有效负载,它就会正确安装,我们将获得 DeviceToken/PushMagic 信息。感谢您提供的帮助。

以上是关于Apple iOS MDM 服务器设置设备注册/配置的主要内容,如果未能解决你的问题,请参考以下文章

iOS MDM:推送不起作用

IOS MDM 推送通知问题使用 Pushsharp C#

注册后在 iOS MDM 代理中获得通知

无法通过 APNS 向设备发送 MDM 推送通知。

iOS MDM 注册

Apple iOS MDM开发流程