Java 验证iOS Mdm消息的分离签名(Mdm签名)

Java 验证iOS Mdm消息的分离签名(Mdm签名),java,ios,mdm,Java,Ios,Mdm,我读过,但仍然不知道如何验证来自iOS设备的Mdm消息的Mdm签名 苹果的移动设备管理协议参考文件如下: 如果MDM有效负载中SignMessage字段的值设置为 没错,来自设备的每条消息都会携带额外的 名为Mdm签名的HTTP头。此标头包含BASE64编码的 消息的签名 因此,我将SignMessage字段的值设置为true。然后,该设备带有一个名为Mdm Signature的头文件。我使用了上面链接的文章提供的方法,verifySign(byte[]signedData,byte[]bPla

我读过,但仍然不知道如何验证来自iOS设备的Mdm消息的Mdm签名

苹果的移动设备管理协议参考文件如下:

如果MDM有效负载中SignMessage字段的值设置为 没错,来自设备的每条消息都会携带额外的 名为Mdm签名的HTTP头。此标头包含BASE64编码的 消息的签名

因此,我将SignMessage字段的值设置为true。然后,该设备带有一个名为Mdm Signature的头文件。我使用了上面链接的文章提供的方法,verifySign(byte[]signedData,byte[]bPlainText)如下所示(我将返回类型修改为boolean。如果验证成功,它将返回true):

(上面的变量“request”是传递给HttpServlet类的doPut方法的HttpServletRequest类的实例。)

但是“verified”的值是false

所以我想知道的是我必须传递给verifySign()方法的确切参数是什么

另见以下内容:

  • 客户端在发送给服务器的HTTP PUT消息中包含一个“Mdm签名:”头
  • 此签名是base-64编码的.DER格式SMIME签名
  • 签名中不包括已签名的内容,而是PUT本身的内容-正在发送的消息
    到MDM服务器
  • 最后,使用MDM注册时发送到设备的私有标识密钥对其进行签名
这些是我的。 我还想知道服务器是否需要客户端公钥来验证分离的签名。没必要吗

boolean verified = verifySign(Base64.decode(request.getHeader("Mdm-Signature")),
                   IOUtils.toString(request.getInputStream(), "utf-8").getBytes());