
先区分证书、密钥与钱包能力
数字证书主要用于把主体身份信息与公钥建立关联,并由签发者通过签名提供可验证的信任依据。证书本身通常不是秘密材料,真正需要保护的是与之配套的私钥。数字证书钱包的能力边界,首先取决于它保存和使用的是证书、公钥、私钥,还是仅保存证书文件和相关元数据。只有持有或能够调用私钥,钱包才可能代表用户执行数字签名、解密或密钥协商等操作;仅保存证书时,通常只能用于展示信息、提取公钥或参与验证流程。
从证书字段确认允许用途
检查证书中的Key Usage和Extended Key Usage等扩展,可以判断证书被设计用于哪些密码操作或业务场景。数字签名、密钥交换、数据加密、服务器身份认证等用途可能存在区别,不能因为证书包含公钥,就推断它可以完成所有操作。Basic Constraints等字段还可帮助区分终端实体证书与证书颁发机构证书。钱包的实际功能应同时满足证书声明的用途、密钥算法的能力以及业务协议的要求。

证书还具有有效期、签发者、主体名称、主体备用名称和证书策略等信息。确认功能边界时,应记录钱包是否会检查这些内容,以及是否能构建并验证从终端证书到可信根的证书链。RFC 5280描述了证书路径验证和证书吊销信息处理的基本框架,因此“能读取证书”与“能判断证书是否可信、是否仍然有效”是两种不同能力。

核对钱包能否完成完整验证
一个较完整的证书钱包通常需要明确支持哪些验证步骤:检查证书签名、验证证书链、判断当前时间是否处于有效期、检查用途是否匹配,以及根据CRL等机制处理吊销状态。若钱包只返回证书中的字段,或只完成本地签名验签,就不能据此宣称具备完整的身份信任判断能力。还要确认信任根由谁维护、吊销信息从哪里取得,以及网络不可用时系统如何处理验证结果。
验证能力也有适用范围。证书链验证解决的是证书是否符合既定信任规则,不能单独证明业务请求内容真实、用户确实同意某项操作,或私钥始终未被泄露。这些结论还需要结合签名数据、时间戳、审计记录、访问控制和密钥保护措施判断。
按密码接口逐项盘点功能
如果钱包通过浏览器或类似密码接口提供能力,应分别列出密钥生成、导入、导出、签名、验签、加密、解密、密钥派生、密钥包装和解包装等操作。Web Crypto API提供的是底层密码原语,能调用某个接口,并不等于系统已经完成安全的证书管理或身份认证。功能清单还应写明支持的算法、密钥类型、参数限制,以及私钥是否可导出。
实际盘点时,可以为每项能力记录四个结果:输入是什么、操作由谁执行、输出是什么、失败时如何处理。例如,验签可能只证明某段数据与公钥匹配;它还需要由上层系统确认签名者身份、证书用途和证书状态。这样可以避免把密码运算能力误认为完整的钱包业务能力。
适用条件与常见问题
在设计或评估钱包时,先列出业务必须完成的动作,再逐一映射到证书字段、私钥操作和验证流程。若业务只需要展示身份,可重点确认证书读取和链信息;若需要签署文件,则必须确认私钥调用、签名算法、待签名数据格式和用户授权;若需要建立加密通信,还要进一步确认协议如何选择证书、如何协商密钥以及如何验证对端。
常见问题是“有证书是否就能签名”。答案通常是否定的,因为签名需要对应私钥。另一个问题是“支持加密是否等于支持解密”。答案也不一定相同,具体取决于密钥类型、算法用途、证书限制和接口设计。还应注意,浏览器密码接口通常要求在安全上下文中使用,底层接口本身也不会替应用决定信任根、业务授权或密钥生命周期。