我正在设计一个系统,除了用户名/密码身份验证之外,用户还可以注册并随后使用客户端证书进行身份验证。
客户端证书必须是由配置的证书颁发机构列表颁发的有效证书,并且在出示时将被检查(验证)。
在注册阶段,我需要将部分客户端证书存储在用户存储库(DB、LDAP 等)中,以便我可以将使用客户端证书进行身份验证的用户映射到内部“用户”。
一个相当明显的选择是使用证书指纹。但是指纹本身是不够的,因为可能会发生冲突(即使它们不太可能发生),所以我们需要存储来自证书的附加信息。这个 SO question在这方面也很有帮助。
RFC 2459定义 (4.1.2.2) 证书序列号在给定 CA 中必须是唯一的。
结合所有这些,我正在考虑为每个注册用户存储证书序列号和证书颁发者。鉴于客户端证书将被验证且有效,这应该唯一标识每个客户端证书。这样,即使客户端证书被更新,它仍然有效(序列号保持不变,颁发者也是如此)。
我错过了什么?