我已阅读verifying detached signature with BC,但我仍然不知道如何从iOS设备验证MDM消息的Mdm-Signature。
Apple的移动设备管理协议参考文档如下:如果MDM有效内容中的SignMessage字段的值设置为 是的,来自设备的每条消息都会附加一条消息 名为Mdm-Signature的HTTP标头。此标头包含BASE64编码 CMS已分离邮件的签名。
所以我将SignMessage字段的值设置为true。然后设备携带一个名为Mdm-Signature的标题。我使用上面链接文章提供的方法,verifySign(byte [] signedData,byte [] bPlainText)如下所示(我修改了返回类型为boolean。如果验证成功则返回true):
boolean verified = verifySign(Base64.decode(request.getHeader("Mdm-Signature")),
IOUtils.toString(request.getInputStream(), "utf-8").getBytes());
(上面的变量“request”是传递给HttpServlet类的doPut方法的HttpServletRequest类的实例。)
但“已验证”的值为 false 。
所以我想知道的是究竟我必须传递给方法verifySign()。
另见:
- 客户端在其发送给服务器的HTTP PUT消息中包含“Mdm-Signature:”标头
- 此签名是base-64编码,.DER格式,SMIME签名
- 签名的内容不包含在签名中,而是PUT本身的内容 - 正在发送的消息
到MDM服务器- 最后,使用在MDM注册时发送到设备的私有身份密钥进行签名
这些来自this page。 我还想知道这些是服务器是否需要客户端公钥来验证分离签名。不需要吗?