【发布时间】:2019-09-19 14:31:23
【问题描述】:
我正在寻找一种方法来验证从第三方发送的 java.security.cert.X509Certificate 对象。证书提供者使用 dns 或 ldap 来获取证书。我已包含一个链接,其中包含有关如何检索证书的其他信息。
我还需要知道将在任何验证步骤中使用的协议和默认端口。证书需要满足本文档第 13 页第 4 节中的以下标准:
- 尚未过期。
- 具有有效的签名和有效的消息摘要
- 尚未撤销
- 绑定到预期的实体
- 具有受信任的证书路径
第 1 项直接将证书对象上的 getNotAfter 和 getNotBefore 方法中的日期与当前日期进行比较,或者使用引发检查异常的 checkValidity 方法。
对于第 2 项,我看到了一种获取签名的方法,但我不确定如何生成消息摘要并验证签名和消息摘要是否都有效。
对于第 3 项,通过在证书上调用此方法 getExtensionValue("2.5.29.31"),证书撤销列表似乎与其他一些数据混合在一起。检索证书撤销列表数据似乎可以通过 http 进行,而 ocsp 似乎基于 http。我一直无法在 java 中找到如何做到这一点。
对于第 4 项,我不确定在证书上下文中绑定意味着什么,或者验证它涉及什么。
对于第 5 项,通过在证书 getExtensionValue("1.3.6.1.5.5.7.1.1") 上调用此方法,看起来中间证书的数据与其他一些数据混合在一起。一旦通过 http 检索到证书数据,CertPathValidator 似乎可以帮助验证此信息。
【问题讨论】:
标签: java ssl-certificate x509certificate