【问题标题】:iOS MDM profile signing, which certificate to use?iOS MDM 配置文件签名,使用哪个证书?
【发布时间】:2023-03-06 23:38:01
【问题描述】:

好的,看看this diagram

有两个小框,表示应如何签署给定的个人资料。

在第 2 阶段的第 1 步中,它说“Apple 颁发了证书”,但没有说 哪个 Apple 颁发了证书(他们颁发了多个证书)。我已经尝试了我的开发者证书和 MDM (APNS) 证书。它不是其中之一。我是否需要第三张魔法证书(以及如何获得它)?

在第 3 阶段第 2 步中,它显示“身份证书”,但在细节上还是有点粗略。我知道的唯一身份证书安装在设备上,使用设备的私钥,服务器应该如何使用它来签署配置文件?

我让它工作的唯一方法是创建我自己的自签名证书,并将其预安装在设备上。显然,这不是一种优雅或特别安全的做事方式。

跟进问题

我的服务器证书由“DigiCert High Assurance EV Root CA”颁发并在列表中:http://support.apple.com/kb/ht5012,但 iOS 6 设备在签署配置文件时认为它“不受信任”,但对于奇怪的 SSL 来说就很好。 iOS 5 设备虽然很好。知道为什么吗?

我也不太了解加密位。从 MDM 文档中:“每个设备都必须有一个唯一的客户端身份证书。您可以将这些证书作为 PKCS#12 容器或通过 SCEP 交付。建议使用 SCEP,因为该协议确保身份的私钥仅存在于设备。”

虽然我同意只有设备本身知道其私钥最终会更安全,但这有点问题,因为 2048 位公钥只能用于加密大约 100 字节的数据,这甚至不足以最小的有效载荷。

【问题讨论】:

    标签: ios certificate x509 mdm


    【解决方案1】:

    让我先回顾一下第 2 阶段和第 3 阶段

    在第 2 阶段,第 1 步中,iOS 设备将向服务器发送由设备证书/密钥签名的响应(每个设备都带有预安装的证书/密钥,每个设备都不同)。这些设备证书/密钥由 Apple 颁发。

    在服务器端,您应该使用 Apple Root Cetificate 进行验证。

    在第 2 阶段的第 1-3 步中,您的配置文件服务将发送 SCEP 请求。此 SCEP 请求包含让设备知道它应该与哪个 SCEP 服务器通信的信息。此 SCEP 服务器是您的服务器。因此,设备将与此 SCEP 服务器对话,并向其请求新的身份证书。

    在第 3 阶段,第 2 步设备响应将使用此身份证书的证书/密钥进行签名。现在您应该使用您的证书颁发机构根证书对其进行验证。 (还有一点需要注意,第 2 阶段的 SCEP 服务器是您的证书颁发机构的一种代理)

    现在回答您的问题“MDM 个人资料签名,使用哪个证书?”

    MDM 配置文件可以加密和/或签名。

    如果要对其进行加密,请使用与此设备关联的身份证书对其进行加密。因此,设备拥有此身份的密钥,因此可以对其进行解密。

    如果您想对其进行签名,请使用您的服务器密钥进行签名。设备应安装服务器证书,以便验证签名。

    顺便说一句。关于这个话题。此图中未显示但通常需要的一件事 - 第一步(在整个注册之前)通常是安装服务器证书(用于将来的配置文件签名验证)。如果您的服务器证书是由知名 CA 颁发的(例如 Verisign 或类似的),您可以跳过此步骤。

    如果您有任何后续问题,请告诉我。我花了一段时间才了解整个 OTA/MDM 注册。

    更新 1

    我不知道为什么 iOS 6 将您的证书视为不受信任的签名。我没有使用由知名 CA 签名的证书。

    我只有一个猜测。可能是在 iOS 5 和 iOS 6 之间,他们改变了一些关于钥匙链的东西。一般来说,每个应用程序都有自己的钥匙链。我相信所有众所周知的证书都应该存储在 Mobile Safari 钥匙串中。可能是 MDM/Preferences 在 iOS 6 中与 MobileSafari 共享了这个钥匙串,现在他们不共享它了。 在这种情况下,您必须通过配置文件安装此“DigiCert High Assurance EV Root CA”(将其放入正确的钥匙串中)。然而,这是疯狂的猜测。

    关于加密。首先,你是对的,如果每个设备都有自己的私钥,那就更安全了。在这种情况下,如果有人会窃取配置文件,他们将无法解密(因为只有设备有私钥才能解密)。如果您要发送敏感的个人资料(例如,同时包含用户名和密码的电子邮件帐户),这一点尤其重要。

    对密码学的高级介绍:

    任何密钥(任何长度)都可以加密任何长度的数据。所有加密算法的设计都是为了让您可以使用相同的密钥来加密任意数量的数据。

    非对称算法(如 RSA)很少用于直接加密数据。在大多数情况下,此算法用于加密对称算法(例如 AES)的密钥,并且所有后续加密/解密都使用 AES 完成。这有两个原因:性能(AES 比 RSA 快)和资源(AES 比 RSA 更少的资源消耗)。

    因此,如果您需要加密配置文件,您可以使用PKCS7,它在内部使用 RSA、AES(或其他算法)。通常,您有一个库来执行此操作(OpenSSL 或 BouncyCastle)。因此,您不必弄清楚所有这些复杂性。

    顺便说一句。如果您有不适合 SO 的问题,欢迎直接与我联系(我的联系信息在我的个人资料中)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-17
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多