日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

创建一个简单的 MDM server(1)

發(fā)布時(shí)間:2023/12/2 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 创建一个简单的 MDM server(1) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前提:已獲得 APNS 證書 ,已完畢 MDM 配置描寫敘述文件的制作。請(qǐng)參考《 MDM 證書申請(qǐng)流程 》一文和《配置MDM Provisioning Profile》。

環(huán)境:OSX 10.9.2,JDK 1.6。Eclipse JavaEE Helois,Tomcat 7.0

一、前言

《THE IOS MDMPROTOCOL》(即Inside Apple MDM)一文中描寫敘述了一個(gè)簡(jiǎn)單 MDM Server Python 實(shí)現(xiàn)(server.py)。

筆者也曾參照此文配置,但在安裝M2Crypto 一步時(shí)遇到一個(gè) cc 參數(shù)沒有定義錯(cuò)誤。實(shí)在無法進(jìn)行下去,因此不得不放棄。在參照《基于IOS上MDM技術(shù)相關(guān)資料整理及匯總》一文時(shí),發(fā)現(xiàn)其使用了商業(yè)SSL證書(StartSSL)。而筆者使用的自簽名SSL證書,有些步驟不太一樣 ,另外在一些關(guān)鍵點(diǎn)也須要讀者自己摸索,因此有了本文的誕生。

二、準(zhǔn)備

無論 APNS 還是 MDM,都須要server實(shí)現(xiàn) https。如果我們使用 Eclipse 調(diào)試 Tomcat,則須要改動(dòng) Servers 項(xiàng)目以下的Tomcat 配置文件 server.xml。詳細(xì)過程請(qǐng)參考《開啟 Tomcat https 服務(wù)》。

三、 實(shí)現(xiàn) checkin URL

MDM 須要實(shí)現(xiàn)完整 APNS 服務(wù),對(duì)此我們採用的是第三方的 java apns 實(shí)現(xiàn)。

主要是 notnoop 的 Java apns(不是google 的 JavaPNS),此外,還有 xmlwise ,用于解析蘋果的 plist 文檔。

java apns有兩個(gè)包:apns-0.1.5.jar 和 apns-0.1.5-jar-with-dependencies.jar包。

前者是 API,后者是依賴包。

xmlwise 就一個(gè)包:xmlwise-1_2.jar。

數(shù)據(jù)庫採用 mysql。因此也須要 mysql-connector-java-5.1.2-bin.jar包。

此外java apns 使用了slf4j。即 slf4j-simple-1.7.7.jar。

將 MDM push 證書 mdm_push.p12 和 provisioning 配置描寫敘述文件 client.mobileconfig 放到WebContent 文件夾下。

用 MySQLWorkbench 連上 mysql 數(shù)據(jù)庫,創(chuàng)建兩張表。用于設(shè)備注冊(cè):

CREATE TABLE `Authenticate` (

? `UDID` varchar(40) NOT NULL,

? `Topic` varchar(200) DEFAULTNULL,

? `timestamp` timestamp NULLDEFAULT CURRENT_TIMESTAMP,

? PRIMARY KEY (`UDID`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

?

?

CREATE TABLE `TokenUpdate` (

? `UDID` varchar(40) NOT NULL,

? `Topic` varchar(200) DEFAULTNULL,

? `PushMagic` varchar(200)DEFAULT NULL,

? `Token` varchar(200) DEFAULTNULL,

? `UnlockToken` blob,

? `timestamp` timestamp NULLDEFAULT CURRENT_TIMESTAMP,

? PRIMARY KEY (`UDID`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

首先看注冊(cè)服務(wù)。設(shè)備注冊(cè)由Servlet checkin 實(shí)現(xiàn)。其 doPut 方法例如以下:

System.out.println("*********ReceivedMessage:***********\n"+plistStr);

try{

Map<String,Object>plist=Plist.fromXml(plistStr);

if(plist!=null){

StringMessageType=plist.get("MessageType").toString();

if(MessageType.equals("Authenticate")){

Authenticate au=newAuthenticate(plist.get("UDID").toString(),plist.get("Topic").toString());

au.save();

}elseif(MessageType.equals("TokenUpdate")){

Stringregex="Token</key>\\s*<data>\\s*([^\\s]*)\\s*</data>";

String tokenStr=Utils.regxCatch(plistStr,regex);

System.out.println("catches tokens:"+tokenStr);

TokenUpdate tu=new TokenUpdate(plist);

tu.Token=tokenStr;

tu.save();

}

response.getWriter().println(Utils.emptyPlist());

}

}catch(Exceptione){

e.printStackTrace();

}

checkin 主要處理與注冊(cè)相關(guān)的兩種消息:Authenticate 和 TokenUpdate。

在設(shè)備注冊(cè)中,server首先收到Authenticate 消息,checkin 將之計(jì)入 Authenticate 表,然后返回一個(gè)空的 plist 文件。設(shè)備隨后會(huì)發(fā)來TokenUpdate 消息。checkin 也會(huì)將之存到 TokenUpdate 表并返回空 plist 文件。在 TokenUpdate 消息的處理中,checkin獲取的是 UDID、device token、push magic和 unlock 等 MDM push中將要用到的重要字段。

當(dāng)中,token(即 APNS 中的 device token)須要特別注意。

由于在蘋果的文檔中說,這是一個(gè)32位長度的字符串。

實(shí)際上我們都知道APNS 中,device token 是一個(gè) byte 數(shù)組。

在 TokenUpdate 消息中,iOS 將 device token 的 byte 數(shù)組進(jìn)行了base64 編碼,結(jié)果變成了一個(gè) 44 字節(jié)長度的 string。也就是說在 TokenUpdate 消息中。<token>字段的值類型應(yīng)該是<string>,而不應(yīng)該是消息中定義的<data>。

一個(gè)典型的 TokenUpdate 消息,其 token 描寫敘述例如以下:

<key>Token</key>

<data> [ 32 byte string, base64 encoded,redacted ]</data>

顯然,這里的<data>必須換成<string>。xmlwise 包中的 Plist 類才干正確解析。

由于在 Plist 類中,對(duì)于 plist 文件里的數(shù)據(jù)類型<data>會(huì)被解析為 byte 數(shù)組而不是字符串。

因此 checkin 在處理 TokenUpdate 消息時(shí)。採取了額外的手段來獲取 token 字段,即正則捕獲。

執(zhí)行 Tomcat server,將 iPad 接入server統(tǒng)一 wifi 網(wǎng)絡(luò),然后在瀏覽器中訪問描寫敘述文件地址:

https://192.168.2.1:8443/mdmtest/client.mobileconfig

此時(shí) safari 將調(diào)用設(shè)置程序,在客戶端安裝 mdm 配置描寫敘述文件。當(dāng)你點(diǎn)擊“安裝”button,iPad 會(huì)請(qǐng)求 checkin URL地址,并發(fā)送Authenticate 消息和 TokenUpdate 消息。你能夠在數(shù)據(jù)庫中查看到這兩條消息。

轉(zhuǎn)載于:https://www.cnblogs.com/liguangsunls/p/6701342.html

總結(jié)

以上是生活随笔為你收集整理的创建一个简单的 MDM server(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。