本地驗證過程:
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