欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

iphone设备管理不见了怎么弄(苹果手机设备管理)

程序员文章站 2024-03-26 15:08:47
1. 证书申请成为一个 mdm vendor访问https://developer.apple.com/contact/submit.php,在这里你可以申请成为一个 mdmvendor;创建证书申请...

1. 证书申请

成为一个 mdm vendor

访问
https://developer.apple.com/contact/submit.php,在这里你可以申请成为一个 mdmvendor;

创建证书申请

打开钥匙串,点击“钥匙串访问->证书助理->从证书颁发机构请求证书”,创建一个 csr。将此 csr 存储至磁盘(vendor.csr)。记住“vendor”字段应该是私钥的名字,创建crs 时会同时创建一个私钥,这个私钥名字(vendor)会显示在钥匙串中。

导出私钥

在钥匙串中选择创建 csr 时的私钥,导出为vendor.p12文件。导出时会要求你设置私钥密码。请记住这个密码。

openssl pkcs12 -in vendor.p12 -nocerts -out vendor.key

会要求你输入3次密码:vendor.p12 的密码、vendor.key 的密码、vendor.key 的密码。

提交 csr登录 portal(
https://developer.apple.com/)

进入 certificates->all,点击 add certificate(“+”按钮),选择production 下的“mdm csr”。

iphone设备管理不见了怎么弄(苹果手机设备管理)

点 continue->continue,上传第二步中创建的 csr,然后点 generate。

点击 download,将得到一个 mdm.cer。

重新创建一个csr

打开钥匙串,点击“钥匙串访问->证书助理->从证书颁发机构请求证书”,创建一个 csr,记住密钥对常用名称(mdmcustomer),导出 csr。文件名: mdmcustomer.csr和mdmcustomer.p12(设置密码)

python mdm_vendor_sign.py –csr mdmcustomer.csr –key ‘vendor.key’ –mdm mdm.cer

(mdm_vendor_sign.py : https://github.com/grinich/mdmvendorsign

执行结果将生成一个 plist_encoded 文件。

上传 plist_encoded

用你的 apple id 登录
https://identity.apple.com/pushcert/ ,点击“create acertificate”,上传 plist_encoded文件。上传后会产生一个 apns 证书,下载后得到一个 .pem 文件(为方便使用,改名push_cert.pem)。双击 .pem 文件将证书安装到钥匙串中。打开钥匙串,看看到该证书

为“apsp:”,如下图所示:

iphone设备管理不见了怎么弄(苹果手机设备管理)

右键导出“mdm_push.p12”,导出时需要设置密码,p12和密码为推送apns服务器时使用

2. https服务器

mdm服务器必须是一个https服务器,首先要有ssl签名证书

cloud.com_bundle.crt

cloud.com.key

双击crt文件加入钥匙串,然后再导出root.p12证书,设置密码;

3. 制作描述文件

下载安装iphoneconfigutility.dmg,iphone 配置实用工具(
http://221.229.167.24/file3.data.weipan.cn/2981255/006aa9846f79793b34b7419affe442e1a8e8fb0d?ip=1437039985,116.231.112.113&ssig=hddx8flq3y&expires=1437041755&kid=sae,l30zoo1wmz&fn=iphoneconfigutility.dmg&skiprd=2&se_ip_debug=116.231.112.113&corp=2&from=1221134&wsiphost=local)

iphone设备管理不见了怎么弄(苹果手机设备管理)

描述文件基本信息填写

iphone设备管理不见了怎么弄(苹果手机设备管理)

凭证里面添加https的三个证书

cloud.com_bundle.crt

root.p12(预先填好密码)

mdmcustomer.p12(预先填好密码)

iphone设备管理不见了怎么弄(苹果手机设备管理)

服务器url和登记url分别是mdm服务器的两个url(server,checkin)

主题是apns证书中的用户id

iphone设备管理不见了怎么弄(苹果手机设备管理)

身份选择mdmcustomer.p12

填写完成后导出为mdm.mobileconfig,放到mdm服务器中

4. 描述文件签名

openssl x509 -inform der -outform pem -in appleaaica.cer -out intermediate.crt.pem
openssl rsa -in cloud.com.key -out cloud.comnopass.key

openssl smime -sign 
-in mdm.mobileconfig 
-out signedmdm.mobileconfig 
-signer cloud.com_bundle.crt 
-inkey cloud.comnopass.key 
-certfile intermediate.crt.pem 
-outform der 
-nodetach

5. mdm服务器

创建两个servlet分别为checkin和server

5.1. 手机访问mdm.mobileconfig文件url,会自动弹出安装描述文件窗口,点击安装

5.2. 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.apple.mgmt.external.c07c9eec-07a2-460a-b972-36ee1068538b</string>
        <key>udid</key>
        <string>e6f9b9a548733c1ec3306d4c6d9b20e2447f12a8</string>
</dict>
</plist>

服务可以根据topic和udid验证当前设备是否允许安装描述文件;

返回空plist文件

<?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>
 </dict>
</plist>

5.3. 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>2e8ef54b-a3b8-4bb8-acec-eff4ffd043fb</string>
        <key>token</key>
        <data>
        u9qw5n5uubc+5od9ln0uvupgvimh3tyqqf2eumwxduq=
        </data>
        <key>topic</key>
        <string>com.apple.mgmt.external.c07c9eec-07a2-460a-b972-36ee1068538b</string>
        <key>udid</key>
        <string>e6f9b9a548733c1ec3306d4c6d9b20e2447f12a8</string>
        <key>unlocktoken</key>
        <data>
refuqqaaborwrvjtaaaabaaaaaruwvbfaaaabaaaaajvvuleaaaaeemrllijok0wnfyu
4klmq6ditunlaaaaknxre6wxfkcbmnew4s7ct018wzswe2ipzxi5izn5eo7xgtkxtbzm
ucjxukfqaaaabaaaaaftquxuaaaafptkvb3g7pt4x9ozeunu9wtha149svrfugaaaaqa
amnqvvvjraaaabafgjk6tnrmykixtvzt06uiq0xbuwaaaaqaaaabv1jbuaaaaaqaaaad
s1rzuaaaaaqaaaaav1blwqaaacj93rqgfppn1uzxwl7kzcfv1is6upi2yk7d+thkxgxf
ubom8dv+8c/wvvvjraaaabatvp11whfj9iotjhme0wydq0xbuwaaaaqaaaacv1jbuaaa
aaqaaaads1rzuaaaaaqaaaabv1blwqaaacgrjcl3j9lbjqi+s6kznpqh5d+g8rhkbtuh
xcx7paejtsz7xfuscdybuejlwqaaaccbea00z3vaojbwpfc52ae8gsidviywtomdcv17
tqp7d1vvsuqaaaaqfczgf7skttmoqc/warqpp0nmqvmaaaaeaaaaa1dsqvaaaaaeaaaa
a0tuwvaaaaaeaaaaafdqs1kaaaaoxd+nxjkpower4uyqza6wzdym4/ctf8sfsspfxgxw
qifvis3imbmoa1vvsuqaaaaqkpmkokbcso+4taqtdngwcunmqvmaaaaeaaaabvdsqvaa
aaaeaaaaa0tuwvaaaaaeaaaaafdqs1kaaaao1hdnfm3drlr+kohvsbkcb5iiqys4e5a2
yeft1o34sxgu1ywu1mr1nlvvsuqaaaaqeoiksc4kq8+ouqr92ps1fknmqvmaaaaeaaaa
bldsqvaaaaaeaaaaa0tuwvaaaaaeaaaaafdqs1kaaaaobjavvl86lvoprh6/vr+fqpoy
sxhd9emigny+be+ghmmc/yr0h+czpvvvsuqaaaaqs7txzvvrtsca1ahzgxo280nmqvma
aaaeaaaab1dsqvaaaaaeaaaaa0tuwvaaaaaeaaaaafdqs1kaaaaovskydmuue2sfp5s5
lsjcmfwmxp+i9t1c0cpgvd9se1eji+xpijmkwfvvsuqaaaaqoeu1r4wfstgi6rruadt7
t0nmqvmaaaaeaaaacfdsqvaaaaaeaaaaautuwvaaaaaeaaaaafdqs1kaaaagpkqzgwzj
        lfcfxke8awsnrodd9uev5rw6s5gm8osf7advvuleaaaaemb92kqdw0p6m5dnizsgogpd
     teftaaaabaaaaalxukfqaaaabaaaaanlvflqaaaabaaaaabxuetzaaaakkd5dm6gh+ym
        1piiu6cowb3vq2qqydbrpgakbdbewzkpgx1tfpy5cxfvvuleaaaaedyp8gnj60suo1nq
        plru/v9dteftaaaabaaaaapxukfqaaaabaaaaanlvflqaaaabaaaaabxuetzaaaakmk/
        ahmocwuvyaurqv+rtdv4kub6hfqlh/vajj/ohikvzbtfjmyikr5vvuleaaaaeir161v3
        sksoic+xghgurlhdteftaaaabaaaaatxukfqaaaabaaaaaflvflqaaaabaaaaabxuetz
        aaaaikvgdluggqfgrreqc33eb7ovhr5l6acqi3wuixnmajslu0lhtgaaabrzruduoedk
        c/+1hogt1ozsezxh9w==
        </data>
</dict>
</plist>

获取如下信息需要保存

pushmagic:推送时使用每次安装描述文件都会变化

token:推送时使用标示推送到得设备重新安装描述文件不会变化

topic:描述文件唯一标示

udid:设备唯一标示

unlocktoken:在清除密码时需要额外提供的安全信息

5.4. 推送命令

try {
            apnsservice service = apns.newservice()
                            .withcert("mdm_push.p12","123456")
                            //.withsandboxdestination()// 调试模式 
                            .withproductiondestination() // 产品模式(调试和产品模式只能使用一种) 
                .build();
string mdmpayload = apns.newpayload().customfield("mdm", pushmagic).build();
string token = parsetoken(token);
service.push(token, mdmpayload);
system.out.println("推送锁屏信息已发送!");
        } catch (exception e) {
            system.out.println("出错了:"+e.getmessage());
            pushstate = 0;
        }

5.5. server获得设备请求命令

发出推送命令后,apns服务器通知设备去mdm取命令;

收到设备的消息为:

<?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>

服务器返回命令为

<?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>e6f9b9a548733c1ec3306d4c6d9b20e2447f12a8</string>
    </dict>
</plist>

6. 卸载描述文件

卸载描述文件分两种情况:

6.1. 设备在线

会发送一个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>checkout</string>
<key>topic</key>
<string>com.apple.mgmt.external.c07c9eec-07a2-460a-b972-36ee1068538b</string>
<key>udid</key>
<string>e6f9b9a548733c1ec3306d4c6d9b20e2447f12a8</string>
</dict>
</plist>

6.2. 设备离线

在确定设备在线的情况下,发送查询命令,如果逾期没收到返回信息标示设备描述文件被卸载;

7. 设备命令

7.1. control commands(控制类命令)

7.1.1. device lock(设备锁屏)

requesttype: devicelock

设备锁屏后,如果设备以前设置了锁屏密码,那么设备就会要求输入你以前的锁屏密码来解除屏幕锁。

7.1.2. erase device(擦出设备数据)

requesttype: erasedevice

擦拭设备的内存数据和重置为“恢复出厂”的状态,需要连接到itunes备份或恢复配置新的。

7.1.3. clear passcode(清除锁屏密码)

requesttype: clearpasscode

另外需要tokenupdate时返回的unlocktoken数据;

如果设备以前设置了锁屏密码,当发送此命令时会清除设备设置的密码。如果密码被其他配置控制需要,用户将可以在宽限期内设置一个新密码。

7.2. device queries(查询设备信息类)

7.2.1. security information(安全信息)

requesttype: securityinfo

列出指定的安全相关的设置装置,包括硬件加密功能,以及是否存在一个密码(如果是这样,是否符合配置)。如果密码是存在的,装置必须解锁执行这个命令。

7.2.2. installed application list(应用程序列表)

requesttype: installedapplicationlist

所有的应用程序目前安装在设备列表。包括应用程序所使用的总体持久性存储,表示字节,随着应用程序的名称,版本,和束标识符。没有列出应用程序安装通过破解方法。

7.2.3. device information(设备信息)

requesttype: deviceinformation

检索指定的一般信息的装置,包括mac的电话号码,软件版本,名称和编号等。

7.2.4. certificate list(证书列表)

requesttype: certificatelist

列出所有目前在设备上安装证书。

7.2.5. profile list(描述文件列表)

requesttype: profilelist

安装在设备描述文件列表。包括普通的名字,是否删除密码是必需的,是否去除无效,唯一的标识符,和其他类似的信息。

7.2.6. provisioning profile list(预装的描述文件列表)

requesttype: provisioningprofilelist

预装在设备列表描述文件(类似于描述文件列表)。

7.2.7. restrictions list(限制列表)

requesttype: restrictionslist

列出目前在设备上的限制的影响。例如,列表禁用应用程序,无论是备份加密是*的,等等。

7.3. device configuration(设备配置)

7.3.1. install profile(安装描述文件)

requesttype: installprofile

给定一个base64编码的.mobileconfig描述文件(由ipcu或其他工具创建),安装在装置的配置。

7.3.2. remove profile(卸载配置文件)

requesttype: removeprofile

给定一个载荷标识符(通常是作为一个反向dns的标识符,如“
com.example.cfg.restrictions”),删除从设备的配置文件。

7.3.3. install provisioning profile(安装预装描述配置文件)

requesttype: installprovisioningprofile

给定一个base64编码的.mobileprovision文件(由ipcu或其他工具创建),安装在装置的配置。

7.3.4. remove provisioning profile(卸载预先安装的描述配置文件)

requesttype: removeprovisioningprofile

该命令会删除配置文件从设备,给出了配置文件的uuid。