在做MDM服务器过程中,作为MDM的服务商,申请完MDM服务,生成了MDM.cer证书,然后需要通过此证书生成推送使用的APSP证书,生成步骤如下(引用的地址:http://esoftmobile.com/2015/03/23/ios-devices-mdm/ ,网上一搜一大片,懒得再写,抄过来的):
申请Vendor
申请成为MDM Vendor
- 首先需要拥有一个 iOS Developer Enterprise Program 帐号;
- 申请成为MDM Vendor,iOS企业开发帐号默认不支持MDM功能,需要向苹果申请才能开通,访问 https://developer.apple.com/contact/submit.php,并通过iOS企业开发帐号Agent身份登录,提交申请说明希望成为MDM Vendor,苹果一般在一个工作日内会处理完毕,处理完后会给Agent发邮件通知,此时再次登录到开发中心Add iOS Certificate界面或多处一个“MDM SCR”选项。
申请证书
- 在OS X上打开钥匙串,点击“钥匙串访问->证书助理->从证书颁发机构请求证书”,创建一个CSR,将此CSR存储至磁盘。记住“常用名称”字段为私钥的名字,创建CSR的同时,钥匙串“密钥”栏中会增加一个以该常用名称为名的私钥。
- 在钥匙串中选择创建CSR时的私钥,导出为MDMVendor.p12文件,导出时会要求你设置私钥密码,如果设置密码请记住这个密码(后面会用到)。
- 登录iOS Developer Center,进入Certificates,点击Add Certificate(“+”按钮),选择Production下面的“MDM SCR”。
点击Continue->Continue,上传之前创建的CSR文件,然后点击Generate。点击Download,得到一个mdm.cer证书。
申请MDM Customer
-
创建CSR
使用钥匙串创建一个CSR,记住密钥的常用名称,导出CSR,命名为MDMCustomer.csr。
获取编码的Plist文件
python mdm_verdor_sign.py --csr MDMCustomer.csr -key 'MDMVendor.key' --mdm mdm.cer
MDMCustomer.csr提交给Vendor,Vendor对Customer提交的MDMCustomer.csr进行签名。我们使用 mdm_vendor_sign.py 工具签名:
执行完后会生成一个plist_encoded文件。
-
获取MDM推送证书
用iOS企业开发帐号的Apple ID登录 Apple Push Certificates Portal,选择“Create a Certificate”,上传之前的plist_encoded文件。上传后会生成一个APNS的证书,下载得到.pem文件,双击文件安装到钥匙串。打开钥匙串可查看该证书名为“APSP:xxx”:
此处是分割线,下面的内容是我的主要内容:
该证书即为MDM指令推送证书,可根据服务端需求导出p12或cer格式提供给服务端开发人员。
重点在这里, 大家发现我们生成的p12证书,在我们的mac的钥匙串并不受信任(我的电脑系统:macOS High Sierra 10.13.3), 提示如下:
可是签名机构明明是苹果的啊,我又仔细看了一下和别人的之前的文章查询发现了区别,下面的是之前的苹果的APSP证书信息:
下面是我们的当前的证书信息:
我们发现,签发者变了,有之前的Apple Application Integration Certification Authority 变成了Apple Application Integration 2 Certification Authority多了个2,然后我们会发现,我们系统默认的钥匙串的签发机构里面,没有这个带2的,但是有不带2的
这也就是为什么之前生成的APSP证书直接就被系统信任,而现在产生的缺不被系统信任,但是为什么苹果不将这个也植入到系统呢?换句话话.这个签发者靠谱吗?我们是不是签名签错了呢?为了验证一下,我查找了一下苹果的所有证书,地址在:https://www.apple.com/certificateauthority/,
发现苹果的证书列表如下:
我们看到了带2的这个证书,缺没有看到不带2的证书,这个让我很尴尬,然后我们下载那个带2的证书,添加到系统,(不需要修改信任策略,直接就被系统信任了) 我们会发现,我们的APSP证书瞬间变得可信任
也就是说明,添加了这个中级签发机构的证书,我们的信任链就完整了,也就是通过了系统验证,到此,可以确定我们签名没有错,
总结一下: 之所以APSP证书添加到mac系统不被信任,是因为系统的信任列表中缺少对应的签发者的证书信息,为什么没有这个,我个人猜测,应该是苹果正在一个过渡期,准备抛弃不带2的那个中间签发机构,这也可能是为什么刚刚那个不带2的证书在苹果的证书列表中找不到的原因吧,估计会有很长一段时间内,这两个证书都会共存,而且植入到系统默认的信任列表中,我个人猜的,应该是这样的 谢谢