本文首发于我的个人博客 www.cc-lab.cn/apple-mdm-d…

MDM Vendor

MDM Vendor 指提供 MDM 服务的角色,比如 AirWatch 就是一个 MDM Vendor,要成为一个 MDM Vendor 需要有企业版开发者账号,然后去 apple 那里申请 mdm vendor 证书(有效期一年)。MDM Vendor 证书可以用来签名 MDM Customer 证书的 csr 文件。

MDM Customer

MDM Customer 指使用 MDM 进行设备管理的角色,比如某公司使用了 AirWatch 的 MDM 服务,那么它就是一个 MDM Customer。

MDM 涉及到的证书

  • MDM Vendor 证书,由我们自己去 apple 生成
  • MDM Customer 证书,由我们生成 csr,然后客户去 apple 那里生成并交给我们,用来和 APNS 通信给设备发送推送通知
  • SCEP 证书,用来签发设备身份证书的 CA 证书
  • 设备身份证书,由我们给设备的用来标识设备身份的证书

MDM 描述文件

设备通过安装一个描述文件来成为 MDM 受控设备,描述文件通常以 .mobileconfig 后缀,描述文件用来保存一组设备的配置策略,以便批量部署(如将 VPN 的配置写入描述文件,就可以通过给设备安装描述文件来批量快速的为设备配置 VPN),MDM 的配置也是写在描述文件的,可以通过 Apple Configurator 2 来生成描述文件,可以手动编写。 一个 MDM 描述文件最少需要包含两部分内容:

设备身份证书

当设备 enroll 成为一个受控设备的时候,会安装一个设备身份证书(Device Identify Certificate),这个设备身份证书用来标识设备,可以通过直接在 MDM mobileconfig 文件中嵌入 PKCS#12 来为设备产生证书,也可以通过 SCEP 协议来为设备颁发证书。一般建议使用 SCEP,PKCS#12 会在服务器端产生公私钥,而 SCEP 协议是由设备产生公私钥然后将公钥给服务器签名生成证书,安全性更强。

MDM payload

MDM payload 主要定义了和设备通信的 MDM server 的地址。

默认的描述文件是没有经过数字签名的,安装到设备上会显示未签名,可以通过添加数字签名来让其成为签名的描述文件(任意的证书私钥进行签名皆可)。

Supervisor Mode

普通的设备 enroll 成为 MDM 受控设备之后,MDM Server 下发一些控制指令,比如安装应用等,需要在设备上进行二次确认,我们可以把一台设备设置成被监督模式(Supervisor Mode),被监督的设备会静默执行安装应用等指令,可以通过 Apple Configurator 2 来将设备编程被监督设备。

!!! 成为被监督设备会清空设备所有内容,同时一些低版本 iOS,如 iOS8 会被要求强制升级到新版 iOS !!!
!!! 成为被监督设备会清空设备所有内容,同时一些低版本 iOS,如 iOS8 会被要求强制升级到新版 iOS !!!
!!! 成为被监督设备会清空设备所有内容,同时一些低版本 iOS,如 iOS8 会被要求强制升级到新版 iOS !!!

MDM 通信流程

MDM Server 和设备的通信主要通过三个URL:

  • scep: 给设备签发设备身份证书 (可选)
  • check in: 接收设备 enroll 鉴权,设备 token 更新,设备退出管理这三个事件
  • server: 接收设备状态、设备执行指令结果,下发指令给设备

MDM Server 通过 APNS 发送推送消息给设备,设备会请求 MDM Server 上报自己的状态,如 Idle 表示设备处于空闲状态。

<?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>【设备的udid】</string>
</dict>
</plist>
复制代码

MDM Server 把需要设备执行的指令放在 response 里面下发给设备执行。

<?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>eba2a485-c5f7-4135-87e8-b36ea72a507d</string><key>Command</key><dict><key>RequestType</key><string>InstalledApplicationList</string></dict>
</dict>
</plist>
复制代码

设备完成指令执行后,会再次请求 MDM Server,将执行结果告诉我们,我们可以通过 CommandUUID 字段,来区分设备的这个请求对应的是哪一条指令的执行结果,同时我们可以把下一条需要设备执行的指令放到 response 里面去下发给设备。

<?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>eba2a485-c5f7-4135-87e8-b36ea72a507d</string><key>InstalledApplicationList</key><array/><key>Status</key><string>Acknowledged</string><key>UDID</key><string>【设备的udid】</string>
</dict>
</plist>
复制代码

一些小 Tips

如何区分 check in 的设备是属于谁的

两个方法,

  1. 可以在 mobileconfig 文件的 check in url 等字段上加上 query 参数,如?accountId=1,然后就可以取出业务上无需要的用户信息了。
  2. check in 的时候,会带上 Topic 字段,可以将其和上传的 Push 证书的 Common 字段对比。

设备身份证书有什么作用

设备每次请求 MDM Server 都会带上设备身份证书,服务器可以开启 2-way SSL,来对请求的证书进行验证。

App 如何判断设备 enroll 的状态(是否受 MDM 管理,是否移除 MDM 管理)

可以通过给 App 推送配置的方式进行,通过 Configuration 这个命令,给设备的某个 App 推送一个配置,当设备处于 enrolled 状态的时候,此配置可读,当设备 checkout 后,此配置会被清除。

Apple MDM 开发相关推荐

  1. Apple Watch开发快速入门教程

     Apple Watch开发快速入门教程  试读下载地址:http://pan.baidu.com/s/1eQ8JdR0 介绍:苹果为Watch提供全新的开发框架WatchKit.本教程是国内第一本A ...

  2. apple tv 开发_如何防止Apple TV进入睡眠状态

    apple tv 开发 Your Apple TV, by default, goes to sleep fairly quickly when not in use. That's great fo ...

  3. apple tv 开发_如何跨多台Apple TV同步Apple TV的主屏幕

    apple tv 开发 If you have more than one Apple TV in your household, you probably know how annoying it ...

  4. Apple计划开发完全定制的GPU架构

    根据Apple目前的GPU供应商,英国Imagination Technologies事务所透露,为了驱动未来新款设备的GPU,Apple将自行开发定制的图形架构.新GPU将在15个月到未来两年内完工 ...

  5. apple tv 开发_Apple TV首批#madewithunity游戏发售

    apple tv 开发 We are super excited to share several awesome Unity games shipping for Apple TV on day o ...

  6. Apple MDM Bypass 免越狱绕过MDM配置锁 免费

    Apple MDM Bypass这款软件可以免费绕过MDM配置锁,不需要越狱,也不需要登录注册,一键激活绕过MDM远程配置锁. 什么是远程配置锁? 远程设备管理是企业和教育机构安装的系统,通过监视.管 ...

  7. apple tv 开发_您应该从Apple TV 3升级到Apple TV 4还是4K?

    apple tv 开发 If you're still stuck in the dinosaur ages with your Apple TV 3, you might be curious ab ...

  8. apple tv 开发_如何在Apple TV上观看直播电视

    apple tv 开发 If you want to watch live TV on your Apple TV-cable or antenna-it's relatively easy to s ...

  9. apple tv 开发_现在是购买Apple TV的好时机吗?

    apple tv 开发 Among the many other announcements Apple recently made at its March 2015 event, was that ...

  10. apple tv 开发_如何在Apple TV上使用HomePod

    apple tv 开发 Apple's HomePod is a great little speaker, and while you can AirPlay music to it from yo ...

最新文章

  1. 年薪100万和10万程序员的差距
  2. RecyclerView添加头条目显示空白的解决方案
  3. java7优化,七、索引优化分析
  4. ASP.NET.CORE发布后启动网站出现500.19-0x8007000d错误解决方法
  5. koa中上传文件到阿里云oss实现点击在线预览和下载
  6. 详解两阶段3D目标检测网络PVRCNN:Point-Voxel Feature Set Abstraction for 3D Object Detection
  7. 使用Advanced Installer将.exe程序重新封装为.msi程序
  8. java 摸拟qq消息提示_java 仿qq消息提示框
  9. 简述 IntentFilter(意图过滤器)
  10. [礼仪大赛策划方案]图:如何打造一场精美极致的礼仪大赛?PPT动态柱状图,如何动态显示?Flash如何渲染PPT界面呢?
  11. 《工业设计史》第九章:职业工业设计师的出现
  12. HDU-3237-Help Bubu
  13. 〔转载〕20条欠揍短消息
  14. 六、Linux常用命令之压缩打包篇(gzip、gunzip、tar、zip、bzip2)
  15. QIIME 2教程. 03老司机上路指南Experience(2021.2)
  16. 【jvm我能讲两小时056】说说Parallel old收集器的特点以及使用场景?
  17. 简易音乐播放器(Android Studio)
  18. Ubuntu14.04停留在开机logo界面
  19. 小汪汪服务器不稳定,小汪汪闪退了怎么办 小汪汪闪退问题解决办法
  20. 快来学selenium初阶到高阶的使用,反爬的案例解析,google驱动的安装配置

热门文章

  1. iSlide2022免费PPT插件(包含众多PPT模板/素材)
  2. VMware虚拟机XP系统安装图文教程
  3. SpringMVC解决POST和GET请求中文乱码问题
  4. 淘客APP有哪些功能?
  5. java 随机生成姓名_生成随机中文姓名java程序.pdf
  6. python读取像素值
  7. 一句话说明java常量池及其存储的对象
  8. python按综合、销量排序抓取100页的淘宝商品列表信息
  9. 数控电机反馈线是哪根_驱动?电机?反馈?和人身体动作一样!十图看懂数控机床进给驱动...
  10. python中如何调取wind数据_Python量化-使用wind接口获取数据