验证 /server url 中的请求

Validating requests in /server url

在iOS中,当设备被APNS唤醒时,MDM /server url将为设备的每个操作调用。我在注册时已安全地加密并签署了其他配置文件,并已成功将服务器 url 传递给设备。它工作正常,但我对此服务器端点的担忧如下。

1) 任何可以发送类似 plist 负载的客户端或实体都可以调用此服务。如果第 3 方有权访问设备 UDID,他们可以编写此 xml 有效负载并调用此服务。从服务器的角度来看,很难跟踪此行为并识别真实设备。确定在真实场景中是否会发送和 CMS 数据或相关以验证此场景?

2) 一旦设备从服务器命中此端点,我们就可以生成操作配置文件并发送回设备。对于注册时的配置文件,我们可以从 CMS 数据中提取 public 证书并从中加密。但是对于这个服务器 url 我该如何实现呢?似乎它没有从设备端获得任何类似的证书。只是想知道是否要保存我们在早期阶段获得的 public 密钥,但由于在注册时它经过 2 次 SCEP 调用,所以不确定要使用它什么。这些后续配置文件有效负载是否可以使用以前的 public 证书加密?现在我无论如何都在签名,效果很好。

好的。您要验证设备的底线。

每个设备都有一个身份证书(在 PKCS12 中或通过 SCEP 分发的证书)。

每次设备与服务器通信时,它都会使用 SSL 客户端证书进行身份验证。

大多数时候,您的网络服务器前面都有一个反向代理。它可以是 Apache 或 Nginx 或其他任何东西。此反向代理终止 SSL 连接并检查客户端证书。通常,它们被配置为将此客户端证书作为 header 传递给您的 Web 应用程序。

通过这种方式,您的网络应用程序可以获得此 header,从中获取证书并检查您的数据库是否具有特定 udid 的设备(传递到您的端点)是否具有证书(传递到您的网络应用程序在 header).

我不确定你用的是哪个reverse,是否配置正确,可以通过证书。

1.) 任何可以发送类似 plist 负载的客户端或实体都可以调用这项服务。如果第 3 方有权访问设备 UDID,他们可以编写此 xml 有效负载并调用此服务。从服务器的角度来看,很难跟踪此行为并识别真实设备。确定在真实场景中是否会发送 CMS 数据或相关数据以验证此场景?

是的,任何可以拥有 UDID 和服务器 URl 的客户端都可以像设备一样向您的服务器发送有效的 Plist。
但他们无法使用设备中的私钥(在 SCEP 注册期间生成)对 plist 进行签名。您将拥有相应的 Public 密钥来验证签名。
要强制设备将签名随每个请求一起发送到 Server URL,您必须在 MDM 负载中包含 SignMessage 标记并将其设置为 true。像这样

<key>SignMessage</key>
     <true/>

因此,当您将此标签与 MDM 负载一起包含时,您将在 Header HTTP_MDM_SIGNATURE 中获得身份私钥的签名。 然后您可以使用 public 密钥验证签名。

2.) 只是想知道要不要保存public键我们进入了早期阶段,但由于在注册时它经历了 2 次 SCEP 调用,所以不确定要使用什么。

是的,我在之前的回答中提到您应该保存在 SCEP 阶段颁发的 public 证书。稍后您将使用该 public 证书验证来自设备的签名并加密您发送的配置文件。

关于 2 个 SCEP 调用,第一个 SCEP 调用是生成证书并安全地传输 MDM 负载和实际 SCEP 负载,这些负载将用作 MDM 的身份证书。
所以你应该使用第二个来验证签名和加密。

另一个提示是,您会在 MDM 负载中提到 IdentityCertificateUUID。身份证书 SCEP 负载应与其 PayloadUUID 具有相同的 UUID。该 SCEP 负载的证书将用作 MDM 的身份证书。