在iOS MDM /服务器中,当APNS唤醒时,设备会为每个操作调用url。我在注册时已经安全加密并签署了其他配置文件,并成功将服务器URL传递给设备。它工作正常,但我对此服务器端点的担忧如下。
1)任何可以发送类似plist有效负载的客户端或实体都可以调用此服务。如果第三方可以访问设备UDID,则可以组成此xml有效负载并调用此服务。从服务器的角度来看,很难跟踪此行为并识别真实设备。要确定它在真实场景中是否会发送和CMS数据或相关以验证此场景?
2)一旦设备从服务器点击此端点,我们就可以生成操作配置文件并发送回设备。对于注册时的配置文件,我们可以从CMS数据中提取公共证书并从中加密。但是对于这个服务器url我该如何实现呢?似乎它没有从设备端获得任何类似的证书。只是想知道是否要保存我们在早期阶段获得的公钥,但是在注册时它经历了2次SCEP调用,不知道该使用它。是否可以使用以前的公共证书加密后续配置文件的有效负载现在,无论如何,我都会签名,但工作正常。
答案 0 :(得分:2)
1。) 任何可以发送类似plist有效负载的客户端或实体都可以调用此服务。如果第三方可以访问设备UDID,则可以组成此xml有效负载并调用此服务。从服务器的角度来看,很难跟踪此行为并识别真实设备。要确定它在真实场景中是否会发送和CMS数据或相关以验证此方案?
是的,任何拥有UDID和服务器URl的客户都可以向您的服务器发送有效的Plist,就像设备一样。
但是他们无法使用设备中的私钥(在SCEP注册期间生成)对plist进行签名。您将拥有相应的公钥来验证签名。
要强制设备将每个请求的签名发送到Server URL
,您必须在MDM有效负载中包含SignMessage
标记并将其设置为true。喜欢这个
<key>SignMessage</key>
<true/>
因此,当您将此标记与MDM有效内容一起包含时,您将在标题HTTP_MDM_SIGNATURE
中获得Identity Private密钥的签名。
然后,您可以使用公钥验证签名。
2。) 只是想知道是否要保存我们在早期阶段获得的公钥,但是在注册时它会通过2个SCEP调用不知道该使用它。
是的我在上一个回答中提到你应该保存在SCEP阶段发布的公共证书。稍后,您将使用该公共证书来验证来自设备的签名并加密您要发送的配置文件。
关于2个SCEP呼叫,第一个SCEP呼叫是生成证书并安全地传输MDM Payload和实际SCEP有效负载,它将用作MDM的Idenitity证书。
因此,您应该使用第二个来验证签名和加密。
还有一个提示,你会在MDM有效载荷中提到IdentityCertificateUUID
。身份证书SCEP有效负载应与其PayloadUUID
具有相同的UUID。该SCEP有效负载证书将用作MDM的身份证书。
答案 1 :(得分:1)
确定。要对设备进行身份验证的底线。
每个设备都有一个身份证书(在PKCS12中或通过SCEP分发的证书)。
每次设备与服务器通信时,它都会使用SSL客户端证书进行身份验证。
大多数情况下,Web服务器的前端都有一个反向代理。它可能是Apache或Nginx或其他任何东西。此反向代理终止SSL连接并检查客户端证书。通常,它们被配置为将此客户端证书作为标头传递给Web应用程序。
通过这种方式,您的Web应用程序可以获取此标头,从中获取证书并检查您的数据库是否具有特定udid(传递到您的端点)的设备是否具有证书(传递到标头中的Web应用程序)。 / p>
我不确定您使用哪种反向以及是否已正确配置以传递证书。