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

时间:2013-01-25 05:45:47

标签: ios provisioning-profile mdm

我们正在尝试设置我们自己的内部iOS MDM服务器,并且我们遇到了一些问题,根据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>

1 个答案:

答案 0 :(得分:4)

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

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

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

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

当我使用MDM时,我发现如果没有这两条信息,几乎不可能麻烦它。

- 更新1 -

正确的呼叫顺序如下

协议的OTA部分

<强> /登记
返回:请求UDID,IMEI等的第一个配置文件

<强> /简档
输入:由iOS设备私钥签名的UDID,IMEI等 返回:具有SCEP有效负载的配置文件

<强> / SCEP操作= GetCACert&安培;消息= EnrollmentCAInstance

<强> / SCEP操作= GetCACaps&安培;消息= EnrollmentCAInstance

<强> / SCEP操作= PKIOperation&安培;消息= MII ..... AAA

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

<强> /简档

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

<强> / SCEP操作= GetCACert&安培;消息= EnrollmentCAInstance

<强> / SCEP操作= GetCACaps&安培;消息= EnrollmentCAInstance

<强> / SCEP操作= PKIOperation&安培;消息= MII ..... AAA

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

协议的MDM部分

<强> /签 输入:签入请求 返回:HTTP代码200

正如您所看到的,它与您所拥有的完全不同。 您是否按照[OTA交付和配置] [1]中的描述实施了所有内容? 很难猜到什么是错的,因为看起来缺少“/ profile”使用的整个部分。

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