通过Safari与mobileconfig获取iOS设备UDID
UDID (Unique Device Identifier),唯一标示符,是iOS设备的一个唯一识别码,每台iOS设备都有一个独一无二的编码,UDID其实也是在设备量产的时候,生成随机的UUID写入到iOS设备硬件或者某一块存储器中,所以变成了固定的完全不会改变的一个标识,用来区别每一个唯一的iOS设备。
随着苹果对程序内获取UDID封杀的越来越严格,私有api已经获取不到UDID,Mac地址等信息,继而出现了使用钥匙串配合uuid等等方法变相实现
制作mobileconfig需要的文件:
(1)mbaike.crt(https服务器端使用证书文件)
(2)mbaike.key(https服务器端使用证书对应的密钥,其实就是一个txt文件)
(3)ca-bundle.pem(startssl官网下载的跟证书文件,具体的在哪里下载,请在startssl控制面板中查找)
(4)unsigned.mobilecofig文件(IOS端生成的未签名的配置描述文件)
2、在mac上通过openssl命令生成签名后的signed.mobileconfig文件:
openssl smime -sign -in unsigned.mobileconfig -out signed.mobileconfig -signer mbaike.crt -inkey mbaike.key -certfile ca-bundle.pem -outform der -nodetach
也可以把key文件的密码写入到key文件中
openssl rsa -in mbaike.key -out mbaikenopass.key
第二步的命令就应该是
openssl smime -sign -in unsigned.mobileconfig -out signed.mobileconfig -signer mbaike.crt -inkey mbaikenopass.key -certfile ca-bundle.pem -outform der -nodetach
这样就完成了对mobileconfig的签名工作了
pfx生成pem
openssl pkcs12 -in test.pfx -clcerts -nokeys -out cert.pem 可能需要密码
pfx生成key
openssl pkcs12 -in test.pfx -nocerts -out cert.key
ca文件就是crt文件
使用原理:
1.在你的服务器上创建一个.mobileconfig的XML格式的描述文件;
2.服务器需要的数据,比如:UDID,IMEI需要在.mobileconfig描述文件中配置好,以及服务器接收数据的URL地址;
3.用户在客户端通过某个点击操作完成.mobileconfig描述文件的安装;
4.手机在安装描述文件时,会向描述文件中配置好的URL发送UDID,IMEI等设备信息数据;
5.服务端收到设备信息数据后,通过scheme打开客户端的app将设备信息作为参数传给客户端;
6.客户端在appDelegate里面将 这个参数存到本地 ,并且存到钥匙串,这样即时app被卸载重装,也无需再次安装;
配置文件的信息:
PayloadContent URL http://127.0.0.1:6699/receive.do DeviceAttributes SERIAL MAC_ADDRESS_EN0 UDID IMEI ICCID VERSION PRODUCT PayloadOrganization dev.skyfox.org PayloadDisplayName 查询设备UDID PayloadVersion 1 PayloadUUID 3C4DC7D2-E475-3375-489C-0BB8D737A653 PayloadIdentifier cn.com.aaaa PayloadDescription 本文件仅用来获取设备ID PayloadType Profile Service
其中,DeviceAttributes对应的key是你想要的信息,还可以添加其他信息,操作系统(iOS)安装完描述文件,获取完这些信息,会将这些信息进行编码,传值给你描述文件中的URL地址,这里需要修改URL就好。
苹果官方文档介绍