如何在 iOS 中开发移动设备管理应用程序

How to develop mobile device management application in iOS

我公司有很多 iOS 设备,我必须集中管理它们,所以我们尝试使用第三方 MDM 应用程序,例如:airwatch,但成本非常高。

我们决定不使用它,而是考虑从头开始创建 MDM。我们尝试了所有在线可用的解决方案,但我没有得到任何解决方案。谁能帮我解决这个问题。

iOS MDM 是无客户端协议。因此,您开发了服务器,但没有为其开发客户端应用程序。其实是有客户端的,不过是苹果开发的内置操作系统

因此,您的服务器将发送命令,内置 MDM 客户端将接收并执行它。

一般来说,如果您想开发 MDM 服务器,您需要注册到 Enterprise Developer Program 并获取 MDM 文档。

一份文档here我相信它会帮助您从头开始创建自己的 mdm 解决方案

Reference

其他一些对开发 mdm 服务器有帮助的 link Ref 1, Ref 2

这是堆栈溢出浏览中的 link 到 MDM tag 这将帮助您获得大多数常见问题解答的答案

如果您想对完成此操作有任何说明,请在下方评论。 我准备好帮助你

更新

概览

  • 为了管理设备,我们可以使用 iOS 设置应用

    手动配置它

    但它存在可扩展性问题,需要大量手动配置每个设备的工作,并且需要物理访问

  • 所以苹果推出了iPCU(iPhone配置实用程序)工具,我们可以使用它创建配置文件(.moibleconfig),我们可以通过USB或OTA(Over)安装它空气)

    但它需要用户交互

  • 所以 apple 为 iOS 引入了 MDM 服务,它不需要用户交互我们可以在没有用户同意的情况下很容易地做很多事情,例如远程锁定、解锁、擦除、配置邮件等...

    MDM 基本上是一种协议,您可以使用它远程管理设备。

    概述

    我们在 iOS 设置应用程序中所做的更改存储在 /var/mobile/Library/ConfigurationProfiles 作为 .plist 文件以及 iPCU 和 MDM 安装的配置文件 (.plist)

    假设我们要关闭设备中的 App Store 应用程序安装,为此我们将进入 设置-> 限制 并关闭 App Store 安装,因此 allowAppInstallation 将在其配置 (.plist) 中变为 false 假设我们正在使用 iPCU 和 MDM 配置应用程序安装然后 iOS 我们将采用最严格的方式iOS 设置应用程序配置文件、iPCU 配置文件和 MDM 配置文件的配置文件之间发生冲突。

    iOS 通过合并所有这些配置文件创建一个名为 ProfileTruth.plist 的配置文件,并且 iOS 与此 plist

    一起工作

    MDM 基本上由这些东西组成

    • iOS 设备

      它可以是使用 iOS.All iOS 运行的任何设备 iOS 设备具有内置 MDM client.It 将根据 MDM 服务器提供的指令执行操作

    • MDM 服务器

      它基本上是一个托管在应用程序或 Web 服务器上的应用程序,它将命令提供给托管在 iOS 设备

    • 上的 MDM 客户端
    • 信号

      这是一种从服务器调用 mdm 客户端的机制,在我们的例子中是 APNS

特此附上 MDM 工作流程

  1. MDM 服务器使用 APNS 发送通知
  2. APNS 将其传送到设备
  3. 内置 MDM 客户端连接到 MDM 服务器
  4. 连接后,MDM 服务器将排队的命令发送回客户端,客户端根据 MDM 服务器发送的命令进行操作,并以适当的确认回复 MDM 服务器

创建简单 MDM 的步骤

MDM 注册

它从 MDM 注册配置文件开始

在 iPCU 中,您可以创建一个新的配置文件,选择 MDM 负载

签到URL

 The is the URL where enrolment of the device happens. 

 i.e upon installation of profile on the device MDM client sends necessary information to the MDM server which MDM server will use to authenticate and connect with the device 

服务器URL

 Once the MDM server got the enrolment information.It can use the information to connect the device using APNS and when MDM client wakes up it connects with the URL mentioned in Server URL and Server can send back the queued commands to MDM client

主题

Enter the subject of APNS certificate that's going to be used for MDM.

身份

It can be any certificate generated by Certificate Assistant but important thing is it has to be signed by globally trusted CA or in the case of self signed CA the CA has be installed in the device.

安装 MDM 注册配置文件

您可以使用空中下载USB

安装此配置文件

安装后,iOS 内置客户端将通过身份验证请求连接到 MDM 服务器(签入 URL)

PUT: /checkin

<?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>MessageType</key>
     <string>Authenticate</string>
     <key>Topic</key>
     <string>com.example.mdm.pushcert</string>
     <key>UDID</key>
     <string> [ redacted ] </string>
 </dict>
 </plist>

现在服务器可以接受或拒绝 Authenticate request.In 命令接受服务器必须响应空白 plist

  <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
     "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
     <plist version="1.0">
     <dict>
     </dict>
     </plist>

收到响应后,MDM 客户端将发送 TokenUpdate 请求

PUT: /checkin

 <?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>MessageType</key>
     <string>TokenUpdate</string>
     <key>PushMagic</key>
     <string> [ redacted uuid string ] </string>
     <key>Token</key>
     <data> [ 32 byte string, base64 encoded, redacted ] </data>
     </data>
     <key>Topic</key>
     <string>com.example.mdm.pushcert</string>
     <key>UDID</key>
     <string> [ redacted ] </string>
     <key>UnlockToken</key>
     <data>
        [ long binary string encoded in base64, redacted ]
     </data>
 </dict>
 </plist>

服务器再次需要发送一个简单的 plist 来完成注册过程

MDM 服务器必须在服务器中存储以下密钥

PushMagic

服务器必须将此附加到它发送的所有推送通知以连接 MDM 客户端

令牌

向 APNS 标识设备的唯一 ID

UnlockToken

用于清除设备密码的密钥。

管理设备

现在服务器必须通过将 Token 传递给推送通知库的 Token 和 Pushmagic 的 Payload 作为值来发送推送通知密钥 MDM

 {"mdm":"996ac527-9993-4a0a-8528-60b2b3c2f52b"}

请参阅 aps 不存在于此负载中

一旦设备收到推送通知,MDM 客户端就会联系服务器URL,而不是签入URL 状态空闲

PUT: /服务器

 <?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>Status</key>
     <string>Idle</string>
     <key>UDID</key>
     <string> [ redacted ] </string>
 </dict>
</plist> 

然后服务器响应它为设备排队的任何命令。

让我们看一个例子 设备锁

 The server has to respond with command like this to the client request

 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
       <key>Command</key>
       <dict>
             <key>RequestType</key>
             <string>DeviceLock</string>
       </dict>
       <key>CommandUUID</key>
       <string></string>
 </dict>
</plist>

当 MDM 客户端收到发送的 状态空闲 请求时 earlier.It 将立即锁定设备并通过以下标准确认响应服务器

<?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>CommandUUID</key>
           <string></string>
           <key>Status</key>
           <string>Acknowledged</string>
           <key>UDID</key>
           <string> [ redacted ] </string>
     </dict>
    </plist> 

您可以在此处找到一些命令列表

那是 all.This 方法可以做一个简单的演示。

注:

我会尽量在此处微调或添加更多内容以便于理解

请仔细阅读此 link 和内容

关于移动设备管理

移动设备管理 (MDM) 协议为系统管理员提供了一种向托管 iOS 设备发送设备管理命令的方法 运行 iOS 4 及更高版本,OS X 设备 运行 OS X v10.7 及更高版本,以及 Apple TV 设备 运行 iOS 7(Apple TV 软件 6.0)及更高版本。通过 MDM 服务,IT 管理员可以检查、安装或删除配置文件;删除密码;并在托管设备上开始安全擦除。

MDM 协议建立在 HTTP、传输层安全 (TLS) 和推送通知之上。相关的 MDM 签入协议提供了一种将初始注册过程委托给单独服务器的方法。

MDM 使用 Apple 推送通知服务 (APNS) 向托管设备发送“唤醒”消息。然后该设备连接到预定的 Web 服务以检索命令和 return 结果。

要提供 MDM 服务,您的 IT 部门需要部署一个 HTTPS 服务器作为 MDM 服务器,然后将包含 MDM 负载的配置文件分发到您的托管设备。

托管设备使用身份通过 TLS (SSL) 向 MDM 服务器验证自身。此身份可以作为证书负载包含在配置文件中,也可以通过使用 SCEP 注册设备来生成。

注意:有关 SCEP 的信息,请参阅位于 datatracker.ietf.org/doc/draft-nourse-scep/ 的 SCEP 规范草案。 MDM 负载可以放置在使用电子邮件或网页分发的配置文件 (.mobileconfig) 文件中,作为无线注册服务交付的最终配置文件的一部分,或者使用设备注册程序自动发送。在任何给定时间只能在一台设备上安装一个 MDM 负载。

通过 MDM 服务安装的配置文件和配置文件称为托管配置文件。当删除 MDM 负载时,这些配置文件会自动删除。尽管 MDM 服务可能有权检查设备以获取配置描述文件或配置描述文件的完整列表,但它可能只会删除其最初安装的应用程序、配置描述文件和配置描述文件。使用托管配置文件安装的帐户称为托管帐户。

除了托管配置文件,您还可以使用 MDM 安装应用程序。通过 MDM 服务安装的应用程序称为托管应用程序。 MDM 服务对托管应用及其数据在设备上的使用方式有额外的控制。

设备 运行 iOS 5 及更高版本在准备使用 Apple Configurator 2 进行部署时可以指定为受监督。此外,设备 运行 iOS 7以后可以使用 Device Enrollment Program 进行监督。受监管设备为组织提供了对其配置和限制的额外控制。在本文档中,如果任何配置选项仅限于受监管设备,其描述会注明该限制。

除非配置文件是使用设备注册程序安装的,否则用户可以随时删除包含 MDM 负载的配置文件。 MDM 服务器始终可以删除自己的配置文件,无论其访问权限如何。在 OS X v10.8 及更高版本和 iOS 5 中,MDM 客户端会在配置文件被删除时使用 CheckOut 命令尝试联系服务器。在早期的 OS 版本中,当用户删除负载时,设备不会联系 MDM 服务器。有关如何检测不再受管理的设备的建议,请参阅 MDM 最佳实践。

除非使用设备注册程序安装,否则无法锁定包含 MDM 负载的配置文件。但是,通过 MDM 安装的托管配置文件可能会被锁定。当主 MDM 配置文件被删除时,所有通过 MDM 安装的托管配置文件都会被删除,即使它们已被锁定。

一览

本文档是为设计用于在企业环境中管理设备的软件的系统管理员和系统集成商编写的。

MDM 签入协议让设备联系您的服务器 MDM 签入协议在初始化期间用于验证设备是否有资格注册 MDM 并通知服务器设备的设备令牌已更新。

相关章节:MDM签入协议 MDM 协议向设备发送管理命令 (主要)MDM 协议使用推送通知告诉受管设备执行特定功能,例如删除应用程序或执行远程擦除。

相关章节:移动设备管理 (MDM) 协议 设计有效载荷的方式很重要 为了获得最大的有效性和安全性,请安装仅包含最基本 MDM 管理信息的基本配置文件,然后在设备被管理后将其他配置文件安装到设备。

相关章节:MDM 最佳实践 设备注册程序允许您使用设置助手配置设备 基于 HTTP 的设备注册计划解决了组织大量购买和部署设备的大规模配置需求,无需在部署前对设备进行工厂定制或预配置。

云服务API提供配置文件管理和映射。使用此 API,您可以创建配置文件、更新配置文件、删除配置文件、获取设备列表以及将这些配置文件与特定设备相关联。

相关章节:设备注册计划 批量购买计划让您可以将应用程序许可证分配给用户和设备 批量购买计划提供了许多 Web 服务,MDM 服务器可以调用这些服务以将批量购买与特定用户或设备相关联。

相关章节:VPP应用分配 可以通过 Apple 推送证书门户生成 Apple 推送通知证书 在您收到客户的 CSR 之前,您必须通过 iOS 配置门户下载“MDM 签名证书”和相关的信任证书。然后,您必须使用该证书签署您客户的证书。