文章插圖

文章插圖
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” 。
點擊 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:” , 如下圖所示:
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)
cloud.com_bundle.crt
root.p12(預先填好密碼)
MDMCustomer.p12(預先填好密碼)
主題是apns證書中的用戶ID
填寫完成后導出為mdm.mobileconfig,放到mdm服務器中
4. 描述文件簽名
openssl x509 -inform DER -outform PEM -in AppleAAICA.cer -out Intermediate.crt.pemopenssl rsa -in cloud.com.key -out cloud.comnopass.keyopenssl smime -sign -in mdm.mobileconfig -out signedmdm.mobileconfig -signer cloud.com_bundle.crt -inkey cloud.comnopass.key -certfile Intermediate.crt.pem -outform der -nodetach5. 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>REFUQQAABORWRVJTAAAABAAAAARUWVBFAAAABAAAAAJVVUlEAAAAEEMrLLiJok0Wnfyu4klmq6dITUNLAAAAKNxRe6wxFKcbmNEw4S7Ct018wzSWe2Ipzxi5IZn5eo7xGTKXTBzMucJXUkFQAAAABAAAAAFTQUxUAAAAFPtkVb3G7PT4x9OZEuNU9wTha149SVRFUgAAAAQAAMNQVVVJRAAAABAfgjk6tnRMYKIXTVZT06UiQ0xBUwAAAAQAAAABV1JBUAAAAAQAAAADS1RZUAAAAAQAAAAAV1BLWQAAACj93rqgfppn1uZxWl7kZcFv1Is6UPI2Yk7D+tHkXGXfUboM8dv+8C/WVVVJRAAAABAtvP11wHFJ9IOtjHme0wYdQ0xBUwAAAAQAAAACV1JBUAAAAAQAAAADS1RZUAAAAAQAAAABV1BLWQAAACgrJcL3j9LbJqi+s6kZnPQH5d+g8rHKbtuhxcx7pAejtsZ7xFuScdYBUEJLWQAAACCbeA00Z3VAojbWpfc52aE8gSIdvIyWToMDCv17tQp7d1VVSUQAAAAQfCzGf7SkTtmoQc/WarqpP0NMQVMAAAAEAAAAA1dSQVAAAAAEAAAAA0tUWVAAAAAEAAAAAFdQS1kAAAAoXd+NxjkpOwer4uyQzA6wZdYm4/ctf8SfsspfxGXwqifVis3ImbMoA1VVSUQAAAAQKpmkOKBcSo+4TaqtdnGWcUNMQVMAAAAEAAAABVdSQVAAAAAEAAAAA0tUWVAAAAAEAAAAAFdQS1kAAAAo1hDNfm3drLR+KOhVsbkcB5IIqYs4e5a2YeFt1o34SXGU1Ywu1mR1nlVVSUQAAAAQEOIKsC4kQ8+OuQR92Ps1fkNMQVMAAAAEAAAABldSQVAAAAAEAAAAA0tUWVAAAAAEAAAAAFdQS1kAAAAoBjaVvl86lvOprH6/Vr+FQPOYsXHD9eMigny+BE+gHmMc/yR0h+czPVVVSUQAAAAQS7txzVVrTSCA1aHzgXo280NMQVMAAAAEAAAAB1dSQVAAAAAEAAAAA0tUWVAAAAAEAAAAAFdQS1kAAAAoVSKYdMuUE2sFP5s5LSJCmfwMXp+i9T1C0CPgVd9se1eji+XpIjmKWFVVSUQAAAAQoeU1R4wfSTGi6RRUaDT7t0NMQVMAAAAEAAAACFdSQVAAAAAEAAAAAUtUWVAAAAAEAAAAAFdQS1kAAAAgpKQZgWZJLfcfxkE8aWSnrodd9Uev5rw6s5GM8OSF7adVVUlEAAAAEMb92KQdw0p6m5DnIzsgogpDTEFTAAAABAAAAAlXUkFQAAAABAAAAANLVFlQAAAABAAAAABXUEtZAAAAKKd5dM6Gh+yM1PIiu6cOWb3VQ2QQydbRpgAKbdbewZKPgX1TFPy5cxFVVUlEAAAAEDyP8gnJ60Suo1nQPlRu/V9DTEFTAAAABAAAAApXUkFQAAAABAAAAANLVFlQAAAABAAAAABXUEtZAAAAKMK/AHmOcWUVYAurqv+RTdV4Kub6HfqLH/VajJ/oHIKVZbtfJMYiKR5VVUlEAAAAEIR161V3Sksoic+XGHgURLhDTEFTAAAABAAAAAtXUkFQAAAABAAAAAFLVFlQAAAABAAAAABXUEtZAAAAIKvGDlUGGqFGRReQc33eb7OvhR5l6aCqi3wUIxnmaJSlU0lHTgAAABRZRuDuoEDKc/+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(清除鎖屏密碼)
【iphone設備管理器不見了 蘋果手機的設備管理不見了怎么弄】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 。
- iphone6拆機教程圖解 iphone6拆機教程 蘋果六更換外屏膜教程
- 為什么iphone插上電腦沒有反應 為什么iphone插電腦沒反應
- iphone合約機為什么那么便宜 iphone合約機值得購買嗎
- iphonex操作手勢 iphone快捷指令自定義手勢
- 蘋果3手機價格 iphone 3價格
- iphone7能用3a快充嗎 iphone7p支持快充嗎?
- iphone12屏幕不清楚正常嗎
- 如何隱藏iphone照片 密碼 如何隱藏iphone照片日期
- iphone更改密碼在哪里 iPhone在哪里改密碼
- 蘋果6plus原價多少錢 iPhone 6Plus現在多少錢
