PKI 是 5% 的技术,95% 的程序。X.509 证书的基本部分非常简单:就是签名。第一个可用的算法已在 1970 年代后期描述,细节在 1990 年代初期已基本解决(这并不是贬低过去二十年的密码学研究,但在实践中,PKCS#1 v1.5 签名是够好了)。
程序准确描述了发生的情况,最好是在“击键级别”:更新中间 CA 证书等敏感操作应该由操作员在至少一名审核员的监督下执行,审核员检查是否没有按下任何键,没有点击按钮,除非明确表示程序中规定。范围大;它还包括对包含 CA 的房间的物理保护、监控摄像机的位置……
因此,您必须问的第一个问题是:产品是否带有全面的程序手册,或者至少是要根据当地环境调整的程序模板?编写这些程序并执行它们是 PKI 中成本最高的部分。这需要知道“幕后”发生了什么:不是“编程如何”的问题,而是对私钥是什么以及它可以做什么有更多明确的概念。如果您内部没有这种知识,并且 PKI 产品也没有提供有关该主题的足够信息,那么您将不得不聘请顾问,这并不便宜(我应该知道)。
身份验证、身份管理和授权不是一回事。当我们一般地谈论 PKI 时,我们通常会想到一些与三个不同活动相关的要求:
这些活动是不同的。有些产品将其中的一部分或全部混为一谈,这可能意味着令人不舒服的限制。例如,考虑Active Directory:作为 LDAP 服务器,它可用于身份管理,但其 Kerberos 组件处理身份验证;这使得将非基于密码的身份验证与 Active Directory 集成起来相当麻烦。
这三种活动必须桥接,但仍保持分开。X.509 证书主要是身份验证,但证书的颁发必须以身份管理为基础,以便知道在证书中放入什么(证书将公钥绑定到身份)。关于 PKI 的一个非常重要的教训是证书对授权没有好处。大多数人对 PKI 犯的第一个错误是他们试图在证书中嵌入访问权限,然后失败了,他们明白他们不应该这样做(确切原因很难确定,但与固有的异步性有关证书颁发)。
所以这就给供应商带来了第二个问题:你的产品是否允许身份管理、证书管理和授权的分离,以及它们之间支持哪些桥梁?
作为说明(不是产品推荐),请考虑Microsoft Forefront Identity Manager套件,其中包括多个产品:用于身份管理的 FIM 服务/门户、用于证书的 FIM CM(围绕 CA 的包装器,也处理智能卡)、FIM用于桥接身份管理与 AD 服务器和 FIM CM 的同步,...
如果您的 PKI 有任何重要价值(如果没有,为什么还要麻烦?),那么您将希望在硬件安全模块中保护您的 CA 私钥。优选地,使根CA离线,前提是离线的CA不能从网络被黑进来。在所有客户端系统中分发根 CA 公钥是一项重大成本,您不希望这样做两次,因此您真的不希望看到您的根 CA 受损或丢失或两者兼而有之。
由于您还有很多证书要颁发,因此您可能需要一个在线中间CA。您可以从该 CA 的丢失或受损中恢复,而无需在所有客户端系统中重新分配新的根 CA 密钥(这就是将根与中间 CA 分开的关键),但这并不意味着您会很高兴看到您的中间 CA 私钥被盗。因此,该密钥的 HSM 也会很棒。
因此,请询问您的 PKI 供应商:是否支持 HSM?
智能卡类似于小型 HSM,但在客户端。智能卡支持需要一些初始化;在某些时候,某些桌面系统上会运行一些智能卡特定代码。同样,PKI 产品可能包含对此的一些支持,也可能不包含。智能卡供应商也可以提供帮助。
如果您的证书用于加密,而不是签名和身份验证,那么您将需要一些密钥托管。事实上,当一些数据用私钥加密并且私钥丢失时,数据就会丢失。因此需要在某处进行备份。这通常是加密电子邮件的情况。此类密钥备份非常敏感(它们对攻击者来说是一个非常诱人的目标),因此不得即兴创作。
因此:PKI 解决方案是否包含密钥托管系统?
另一方面,您当然不想托管用于签名的密钥,因为这将危及可能附加到这些签名的任何法律价值(细节因上下文和管辖权而异,但作为一般规则,您不会托管签名密钥)。这意味着想要进行加密和签名的用户将需要两个密钥,因此需要两个证书。因此还有一个问题:PKI 解决方案是否支持多证书用户?
以上所有内容都是关于 X.509 的 PKI。可能存在替代解决方案,例如基于 ID 的密码学(“电压”的含义,由 @Dave 链接),或像OpenPGP Web of Trust这样的分散式系统。一个必要的初始步骤是写下您的要求。你有限制;那挺好的。但是您还必须回答以下问题:一个 PKI,是的,但要做什么?