ios mdm更新应用_ios设备mdm的实现过程
一)配置IIS加密连接,ios系统升级7.1后已经无法使用http进行企业内部署,为了满足mdm的加密需求以及大厅的初始化安装需要进行生成自签名证书
1)配置MIME
cer application/x-x509-ca-cert
.mobileconfig application/x-apple-aspen-config
2)brew install go (如果无法link成功请运行brew prune )
go get github.com/deckarep/EasyCert
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
使用附件中的go文件替换src下的源文件,修改certName和hostName为发证单位和服务器信息(区分域名和IP地址)
go build EasyCert
easycert
3)mmc导入信任根节点myCA.cer(使用自签名的话后面IPCU中要导入根证书)
IIS导入server.pfx,设置证书,设置绑定(要重启)
下载IPCU,使用myCA.cer作为描述文件的证书,client.pfx作为mdm的验证证书
二)配置MDM
1)新建一个文件夹,然后拷贝上一步生成的server.req ,server.pfx,server.key 到该文件夹,使用server.req向developercenter请求msr证书,下载获得的证书文件mdm.cer
openssl x509 -inform der -in mdm.cer -out mdm.pem
openssl genrsa -des3 -out customerPrivateKey.pem 2048
openssl req -new -key customerPrivateKey.pem -out customer.csr -subj '/C=CN/ST=BeiJing/L=BeiJing/CN=10.18.3.33'
openssl req -inform pem -outform der -in customer.csr -out customer.der
2)从git下载mdmvendor生成plist.然后去苹果网站生成证书
python mdm_vendor_sign.py --csr customer.csr --key server.key --mdm mdm.cer
下载pem文件重命名(MDMYTHT.pem)
查看证书信息信息
openssl x509 -noout -in mdmYTHT.pem -issuer -subject -dates
将UID拷贝出来,这个是MDM中的Topic信息( com.apple.mgmt.External.e617f289-3be5-4df7-90fa-5ec8f75d8c98)
3)导出发送MDM信息的证书文件
openssl rsa -in customerPrivateKey.pem -out PlainKey.pem
cat MDMYTHT.pem PlainKey.pem > PlainCert.pem
openssl pkcs12 -export -out mdmapnscertificate.pfx -inkey PlainKey.pem -in MDMYTHT.pem
mdmapnscertificate.pfx作为推送证书在PushSharp中使用
三)iis配置接收PUT
四)获取设备Checkin的信息(如果要区分设备,需要建立页面接收用户输入的名称然后修改chekcin地址并生成mobieconfig文件供下载,使用自签名证书的话无法给改文件签名)
StreamReader stream = new StreamReader(context.Request.InputStream);
string x = stream.ReadToEnd();
string xml = HttpUtility.UrlDecode(x);
Console.WriteLine(xml);
var result = (Dictionary)PlistCS.Plist.readPlistSource(xml);
if (result["MessageType"].ToString() == "Authenticate")
{
XbModel.XNOAEntities xnoa = new XbModel.XNOAEntities();
var udid = result["UDID"].ToString();
XbModel.MdmData mdmdata = xnoa.MdmData.FirstOrDefault(xx => xx.UDID == udid);
if (mdmdata == null)
{
mdmdata = new XbModel.MdmData();
mdmdata.UDID = result["UDID"].ToString();
mdmdata.Topic = result["Topic"].ToString();
xnoa.MdmData.Add(mdmdata);
xnoa.SaveChanges();
}
context.Response.Clear();
context.Response.ContentType = "text/xml";
context.Response.Write(APSP.Common.FileHelper.ReadFile(context.Server.MapPath("~/ForMobile/blank.plist")));
context.Response.End();
}
if (result["MessageType"].ToString() == "TokenUpdate")
{
XbModel.XNOAEntities xnoa = new XbModel.XNOAEntities();
var udid=result["UDID"].ToString();
XbModel.MdmData mdmdata = xnoa.MdmData.FirstOrDefault(xx => xx.UDID ==udid );
if (mdmdata != null)
{
mdmdata.PushMagic = result["PushMagic"].ToString();
mdmdata.Token = (byte[])result["Token"];
mdmdata.UnlockToken = (byte[])result["UnlockToken"];
xnoa.SaveChanges();
}
context.Response.Clear();
context.Response.StatusCode = 200;
context.Response.End();
}
五)推送MDM信息
var xnoa = new XNOAEntities();
var appleCert = File.ReadAllBytes(@"mdmpush.pfx");
var appleset = new ApplePushChannelSettings(true, appleCert, "******", true);
var push = new ApplePushService(appleset);
push.OnNotificationFailed += new PushSharp.Core.NotificationFailedDelegate(push_OnNotificationFailed);
push.OnNotificationSent += (sender, notification1) => Console.WriteLine("NOTIFICATION Send: " + ((AppleNotification)notification1).DeviceToken);
push.OnNotificationRequeue += (sender, e) => Console.WriteLine("REQUEUE: " + ((AppleNotification)e.Notification).Identifier);
push.OnServiceException += new PushSharp.Core.ServiceExceptionDelegate(push_OnServiceException);
foreach (var mdmcommand in xnoa.MdmCommand.Where(x => x.CommandStatus == "-1"))
{
String pushMagicString = mdmcommand.PushMagic;
String token = mdmcommand.Token;// BitConverter.ToString(mdmdata.Token).Replace("-", string.Empty);
Console.WriteLine("Device Token length is: " + token.Length);
Console.WriteLine("DeviceToken is: " + token);
Console.WriteLine("PushMagic is: " + pushMagicString);
var notification = new AppleNotification(token, new AppleNotificationPayload()).WithCustomItem("mdm", mdmcommand.PushMagic);
Console.WriteLine(notification.ToString());
push.QueueNotification(notification);
}
Console.WriteLine("Waiting for Queue to Finish...");
//Stop and wait for the queues to drains
push.Stop(true);
Console.WriteLine("Queue Finished, press return to exit...");
ios mdm更新应用_ios设备mdm的实现过程相关推荐
- ios 检测是否联网_iOS 设备打开触动精灵提示“您的网络不给力哦,请检查您的设备是否联网”怎么解决?...
如果您打开 Cydia 显示"似乎已断开与互联网的连接"请查看:Cydia 提示无网络解决办法,安装乐网后 Cydia 添加 https://apt.abcydia.com 安装 ...
- iphone屏蔽系统更新_屏蔽 iOS 系统更新的最新方法,支持所有 iPhone、iPad 设备
为了进行功能性更新.封堵已知漏洞,苹果经常会推送 iOS 系统更新,但不是所有人都乐意将设备升级最新版.可是 iOS 中并未提供禁止更新的设定,因此,用户必须用各种手段达到屏蔽更新的目的. 教程 阻断 ...
- 苹果屏蔽更新_屏蔽 iOS 系统更新的最新方法,支持所有 iPhone、iPad 设备
为了进行功能性更新.封堵已知漏洞,苹果经常会推送 iOS 系统更新,但不是所有人都乐意将设备升级最新版.可是 iOS 中并未提供禁止更新的设定,因此,用户必须用各种手段达到屏蔽更新的目的. 在 202 ...
- Apple MDM Bypass 免越狱绕过MDM配置锁 免费
Apple MDM Bypass这款软件可以免费绕过MDM配置锁,不需要越狱,也不需要登录注册,一键激活绕过MDM远程配置锁. 什么是远程配置锁? 远程设备管理是企业和教育机构安装的系统,通过监视.管 ...
- Win11 不支持移动任务栏位置;苹果将推出更大尺寸的 iPad Pro;iOS 15 更新 Beta2 版本|极客头条...
「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...
- ios系统安装包下载_iOS 屏蔽系统升级,描述文件版本已复活,无需越狱,请速度下载!...
沉寂已久的老方法,利用描述文件屏蔽 iOS 系统更新,目前已经正式恢复,再也不担心会自动下载更新包啦. 以往都是安装 tvOS 系列的描述文件,绕过苹果验证更新,从而达到阻止系统升级的目的,但是自 i ...
- ios禁用更新_如何为iOS应用启用或禁用自动更新
ios禁用更新 Automatic downloads in iOS allow apps, as well as other items, to be updated automatically. ...
- iOS Core Bluetooth_3 用作中央设备的常用方法(1/2)[swift实现]
章节连接 iOS Core Bluetooth_1 概述 iOS Core Bluetooth_2 基础知识 iOS Core Bluetooth_3 用作中央设备的常用方法(1/2)[swift实现 ...
- iOS Core Bluetooth_4 用作中央设备的常用方法(2/2)[swift实现]
章节连接 iOS Core Bluetooth_1 概述 iOS Core Bluetooth_2 基础知识 iOS Core Bluetooth_3 用作中央设备的常用方法(1/2)[swift实现 ...
- ios系统更新后无网络连接网络连接网络连接到服务器,更新iOS 14后无法正常连接是怎么回事?Wi-Fi网络的解决办法[多图]...
一些用户在升级 iOS 14 之后,发现手机 Wi-Fi 出现了无法连接的问题,非常影响正常使用.最近很多用户在使用更新系统的时候,都出现了使用上的问题,很多用户在使用这款软件的时候,出现了网络不好的 ...
最新文章
- 安装VMware,出现Microsoft Runtime DLL 安装程序未能完成安装,解决方法
- phpmyadmin 解压首次无法登陆问题
- mybatis入门(一)之基础安装
- 状态管理 - 全局状态管理工具
- HTML的文本格式化
- MySQL忘记root密码的解决办法
- IAM(身份验证以及访问控制)
- Linux C基础笔记(1)
- vscode 切换开发者工具_大整理!JavaScript开发者的27个神奇VSCode工具
- Ubuntu16.04 +cuda8.0+cudnn+caffe+theano+tensorflow配置明细
- ES6 新特性(深入浅出ES6—阮一峰)
- HTML是什么?HTML简介
- spring事务REQUIRED REQUIRES_NEW区别
- 电子警察的系统结构和功能设计
- springboot使用FileAlterationMonitor完成对指定文件夹下面指定文件的动态监控
- 印度软件巨头Infosys的成功之道
- vue与webpack
- 引领智能家居新浪潮 走进云图全场景智能家居数字照明
- Linux上面开发android手机驱动加载.
- 关于使用C++万能头文件时定义y1报编译错误的那点事
热门文章
- 免费开源的100套Echarts大屏数据可视化模板分享
- App测试流程及测试点
- 错误	LNK2005 xxx已经在 xxx.obj 中定义
- OSChina 周五乱弹 —— 男友手机上存了好多鸡的照片
- ubuntu mysql卸载教程_ubuntu下安装mysql及卸载mysql详细教程/方法
- JAVA输出100以内素数
- android 背景渐变颜色代码,Android开发——实现背景颜色渐变效果
- matlab中如何去掉多行注释_matlab注释多行的方法
- python论文降重_论文怕被查重怎么办?你的降重神器来了|简明python教程|python入门|python教程...
- 正交试验minitab