简单记录一下操作流程
首先,我们需要的证书有两部分:
一是通过苹果开发者中心申请的MDM证书(一般证书不带MDM功能,需要另外加选),这里我们有的是MDM_Certificate.pem 和最后的成品 MDM_Certificate.p12
二是CA给我们服务器的SSL证书,一般是我们使用未认证的crt证书,得到的是CA认证过的.crt证书和.key密钥文件
工具我用到的是win版的iphone实用配置工具(比较老的版本了,后来被apple configurator 和 apple configurator2所取代,但是新版本没弄明白怎么用)

另外用到了mac,主要是需要用到openssl命令,win需要安装环境
- 第一步,我们生成SSL的p12证书
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
如果证书正确,会提示输入密码,完成后就能得到我们需要的client.p12证书
- 第二步,我们生成mobileConfig配置文件
- 通用
需要注意的是控制配置文件何时可以移除这一项必须选总是,否者无法安装上

- 凭证
即我们之前生成的SSL的p12证书,注意不是mdm的p12证书
win需要先安装p12证书,才能在这一项选取到

- 移动设备管理,即MDM
先看图:

前两项与我们服务端对应,两个url分别是注册url和服务响应url,在服务器中我们会说到
主题需要我们去MDM的pem格式证书里面找到,使用命令:
openssl x509 -in cert.pem -noout -text
能看到输出中有一行com.apple.mgmt.External.xxxxxxxxxxxxxx的信息,拿出来填在这里
身份选择之前添加的凭证即可
最后勾选上移除时检查,这让我们可以在配置文件被移除时通知服务器
- 第三步,搭建服务器
上一步生成的配置文件,我们将它暴露在手机可以访问的网络上,safari去访问的时候会自动安装这个配置文件
我们服务器首先搭建在之前的https域名下,需要一个注册功能,当手机安装配置文件的时候,会向注册url发起前后两次请求,分别是认证请求和updateToken请求。
- 认证请求会提供手机的相关信息,包括UDID码(后面的交互几乎都是用这个码来进行,所以用它做设备表的主键),IMEI码,系统版本,手机型号

- updateToken请求比较重要,也带有UDID码,还有我们推送时需要的PushMagic,以及token信息。还有设备擦除密码的token,这里我们用不到

该接口还需要接收 checkOut请求,以判断设备是否删除MDM配置文件

然后我们用这些信息向apns发出mdm请求,手机在接收到apns的推送后,会主动请求上文中提到的另一个url——服务器响应url,会带上自己的UDID码,以及手机当前的状态。状态分很多种,有空闲,有错误,有操作完成,还有当前忙稍后重试等等,如果是空闲(Idle)我们就可以向手机端输出操作了
具体的操作有非常多的种类,这里大家可以按需求去研究
最后如果手机成功执行操作,会将“操作完成”的状态请求到服务器响应url,这样我们可以获取到状态。