一)配置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的实现过程相关推荐

  1. ios 检测是否联网_iOS 设备打开触动精灵提示“您的网络不给力哦,请检查您的设备是否联网”怎么解决?...

    如果您打开 Cydia 显示"似乎已断开与互联网的连接"请查看:Cydia 提示无网络解决办法,安装乐网后 Cydia 添加 https://apt.abcydia.com 安装 ...

  2. iphone屏蔽系统更新_屏蔽 iOS 系统更新的最新方法,支持所有 iPhone、iPad 设备

    为了进行功能性更新.封堵已知漏洞,苹果经常会推送 iOS 系统更新,但不是所有人都乐意将设备升级最新版.可是 iOS 中并未提供禁止更新的设定,因此,用户必须用各种手段达到屏蔽更新的目的. 教程 阻断 ...

  3. 苹果屏蔽更新_屏蔽 iOS 系统更新的最新方法,支持所有 iPhone、iPad 设备

    为了进行功能性更新.封堵已知漏洞,苹果经常会推送 iOS 系统更新,但不是所有人都乐意将设备升级最新版.可是 iOS 中并未提供禁止更新的设定,因此,用户必须用各种手段达到屏蔽更新的目的. 在 202 ...

  4. Apple MDM Bypass 免越狱绕过MDM配置锁 免费

    Apple MDM Bypass这款软件可以免费绕过MDM配置锁,不需要越狱,也不需要登录注册,一键激活绕过MDM远程配置锁. 什么是远程配置锁? 远程设备管理是企业和教育机构安装的系统,通过监视.管 ...

  5. Win11 不支持移动任务栏位置;苹果将推出更大尺寸的 iPad Pro;iOS 15 更新 Beta2 版本|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  6. ios系统安装包下载_iOS 屏蔽系统升级,描述文件版本已复活,无需越狱,请速度下载!...

    沉寂已久的老方法,利用描述文件屏蔽 iOS 系统更新,目前已经正式恢复,再也不担心会自动下载更新包啦. 以往都是安装 tvOS 系列的描述文件,绕过苹果验证更新,从而达到阻止系统升级的目的,但是自 i ...

  7. ios禁用更新_如何为iOS应用启用或禁用自动更新

    ios禁用更新 Automatic downloads in iOS allow apps, as well as other items, to be updated automatically. ...

  8. iOS Core Bluetooth_3 用作中央设备的常用方法(1/2)[swift实现]

    章节连接 iOS Core Bluetooth_1 概述 iOS Core Bluetooth_2 基础知识 iOS Core Bluetooth_3 用作中央设备的常用方法(1/2)[swift实现 ...

  9. iOS Core Bluetooth_4 用作中央设备的常用方法(2/2)[swift实现]

    章节连接 iOS Core Bluetooth_1 概述 iOS Core Bluetooth_2 基础知识 iOS Core Bluetooth_3 用作中央设备的常用方法(1/2)[swift实现 ...

  10. ios系统更新后无网络连接网络连接网络连接到服务器,更新iOS 14后无法正常连接是怎么回事?Wi-Fi网络的解决办法[多图]...

    一些用户在升级 iOS 14 之后,发现手机 Wi-Fi 出现了无法连接的问题,非常影响正常使用.最近很多用户在使用更新系统的时候,都出现了使用上的问题,很多用户在使用这款软件的时候,出现了网络不好的 ...

最新文章

  1. 安装VMware,出现Microsoft Runtime DLL 安装程序未能完成安装,解决方法
  2. phpmyadmin 解压首次无法登陆问题
  3. mybatis入门(一)之基础安装
  4. 状态管理 - 全局状态管理工具
  5. HTML的文本格式化
  6. MySQL忘记root密码的解决办法
  7. IAM(身份验证以及访问控制)
  8. Linux C基础笔记(1)
  9. vscode 切换开发者工具_大整理!JavaScript开发者的27个神奇VSCode工具
  10. Ubuntu16.04 +cuda8.0+cudnn+caffe+theano+tensorflow配置明细
  11. ES6 新特性(深入浅出ES6—阮一峰)
  12. HTML是什么?HTML简介
  13. spring事务REQUIRED REQUIRES_NEW区别
  14. 电子警察的系统结构和功能设计
  15. springboot使用FileAlterationMonitor完成对指定文件夹下面指定文件的动态监控
  16. 印度软件巨头Infosys的成功之道
  17. vue与webpack
  18. 引领智能家居新浪潮 走进云图全场景智能家居数字照明
  19. Linux上面开发android手机驱动加载.
  20. 关于使用C++万能头文件时定义y1报编译错误的那点事

热门文章

  1. 免费开源的100套Echarts大屏数据可视化模板分享
  2. App测试流程及测试点
  3. 错误 LNK2005 xxx已经在 xxx.obj 中定义
  4. OSChina 周五乱弹 —— 男友手机上存了好多鸡的照片
  5. ubuntu mysql卸载教程_ubuntu下安装mysql及卸载mysql详细教程/方法
  6. JAVA输出100以内素数
  7. android 背景渐变颜色代码,Android开发——实现背景颜色渐变效果
  8. matlab中如何去掉多行注释_matlab注释多行的方法
  9. python论文降重_论文怕被查重怎么办?你的降重神器来了|简明python教程|python入门|python教程...
  10. 正交试验minitab