本地验证过程:
1 检查证书的有效期
2 检查证书的密钥用法KU和扩展密钥用法EKU
3 检查证书的主题或主体备用名称SAN
4 检查证书的CA签名。证书链的构建,需要检查每个CA证书的有效性,比如:有效期;密钥用法,是否支持证书签发;路径长度限制(基本约束);名字约束检查;策略约束检查;再用ACL检查CA是否已经注销
5 通过CRL检查证书是否已经注销
基于Client-Server模式的证书验证协议主要有
OCSP
需要客户端构建证书链并验证(因为需要知道CA的主题密钥标识),再到OCSP服务器检查证书的注销状态
LDAP
虽然LDAP的目的不是用来验证证书的有效性,但也有些设备是用LDAP来验证证书的。客户端本地检查完证书的有效期,通过后再提交证书的主题信息到LDAP去查询,如果能查询到,再匹配下证书摘要是否相同,都通过后就表示此证书有效。
SCVP
服务端构建证书链并验证,服务端检查证书的注销状态
JCA证书验证架构:
JDK实现代码:http://www.docjar.com/html/api/sun/security/provider/certpath/PKIXCertPathValidator.java.html
参考资料:
“Complete CRLs with expired certs?”
http://www.ietf.org/mail-archive/web/pkix/current/msg03772.html