MDM獲取UDID的幾個技術點

weixin_34249678發表於2018-07-09

title: 獲取UDID
date: 2018-02-02
categories:
tags: Objective-C,


MDM獲取UDID的幾個技術點

MDM服務

MDM - Moblie Device Management
介紹MDM的文章:
https://www.jianshu.com/p/6112050ea31a
MDM是服務於企業級應用的一種模式。
MDM可以突破許多App Store應用的束縛。
目前我實踐的有獲取UDID。

還有一個功能會吸引一些人:靜默更新(無提示的強制更新)。這個功能我沒有進行過實驗和驗證,是從幾個方面有提示和比較可信的推論。有興趣的可以進一步研究。

獲取UDID的證書

關於如何獲取手機的UDID。目前可行的方法是通過安裝描述檔案來獲取到裝置的真實UDID。
網上已經有許多相關的文章,大多數轉載自這一篇:
http://www.skyfox.org/safari-ios-device-udid.html
這個是關於證書【eizih
http://www.rootmanager.com/iphone-ota-configuration/iphone-ota-setup-with-signed-mobileconfig.html

本文僅介紹iOS方面的技術點,這篇文章有關於證書上傳伺服器的內容。瞭解原理可以看看。想拿現成就用下面舉例的內容,記得兩點就行:1、更改自定義的內容;2、檔案的格式為.mobileconfig

描述檔案舉例:

 <!--參考:https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/iPhoneOTAConfiguration/ConfigurationProfileExamples/ConfigurationProfileExamples.html-->
<?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>PayloadContent</key>
        <dict>
            <key>URL</key>
            <string>你接受資料的URL</string> <!--接收資料的介面地址-->
            <key>DeviceAttributes</key>
            <array>
                <string>UDID</string>
                <string>IMEI</string>
                <string>ICCID</string>
                <string>VERSION</string>
                <string>PRODUCT</string>
            </array>
        </dict>
        <key>PayloadOrganization</key>
        <string>安裝顯示的組織者</string>  <!--組織名稱-->
        <key>PayloadDisplayName</key>
        <string>安裝顯示標題</string>  <!--安裝時顯示的標題-->
        <key>PayloadVersion</key>
        <integer>1</integer>
        <key>PayloadUUID</key>
        <string>十六進位制,格式為:8-4-4-4-12</string>  <!--自己隨機填寫的唯一字串-->
        <key>PayloadIdentifier</key>
        <string>你的識別符號</string>
        <key>PayloadDescription</key>
        <string>安裝顯示內容</string>   <!--描述-->
        <key>PayloadType</key>
        <string>Profile Service</string>
    </dict>
</plist>
5561285-d0ff215588b81f21.jpg
image

關於獲取UDID的配置檔案有上述的格式。
URL是把UDID傳送給伺服器的介面
array裡面的資訊是獲取的裝置資訊
PayloadOrganization是組織者標識
PayloadDisplayName是顯示的標題
PayloadDescription是顯示的描述

證書的簽名

關於證書的簽名有兩種方式:使用SSL證書來進行簽名;使用描述檔案來進行簽名

我在處理的過程中使用的是SSL證書來進行簽名。
最好準備有如下六個檔案:
ca.crt 額,根證書
ssl.crt 公鑰
ssl.pem 公鑰的一種格式,還是公鑰
ssl.key 私鑰
unsign.mobileconfig 未簽名配置檔案
sign.mobileconfig 已簽名配置檔案(佔位作用,實際是未簽名檔案拷貝的)

注意的是SSL證書的頒發機構要和CA證書是同一家。

簡單介紹一下ssl.crtssl.pemssl.crtssl.pem是可以互相匯出的。
這兩個檔案內容是一樣的。區別在於格式。這個檔案其實是ssl證書的私鑰。pem是一種格式。一般情況下預設是這種格式。

ca.crt如何獲取

我在使用中用了兩家公司的。一個是symantec GeoTrust。其實不論哪一家,都是可以獲取到的,網上有很多方法,現在介紹一種簡單粗暴的。
Chrome中,訪問官網,然後通過點選瀏覽器輸入框的https:/****前的鎖。來找到證書。拖動詳情裡的證書可以儲存在電腦。(我改機構後使用的證書是和知乎的一樣是RSA,GeoTrust官網的是SHA2。這個狀態是補這篇部落格的時候測試的)

5561285-4b8d1f2fa6864e98.jpg
image

如果獲取的證書的格式不正確,可以轉換格式。轉.pem來保證後續處理。

ssl檔案需要伺服器的同事去請求。

檔案準備全之後。開啟終端,進入到存放這些證書的資料夾。執行如下的命令

openssl smime -sign -in sign.mobileconfig -out sign.mobileconfig -signer ssl.crt -inkey ssl.key -certfile ca.crt -outform der -nodetach

上面的crt檔案都可以改為pem檔案.

關於簽名和未簽名

簽名後的證書在安裝的時候是綠色。未簽名的證書是紅色。
簽名的證書如果過期之後,瀏覽器可能顯示出證書內容,是亂碼。
未簽名證書也有可能被瀏覽器展示出來,是明文。

相關文章