java - 验证认证路径

标签 java saml-2.0 opensaml

我用 Java 实现了 SAML SP。
为了验证 SAML 响应的证书,
我从 SAML 响应中提取 X509Certificate 元素,并根据我预先上传 IDP 证书的 Java keystore 文件对其进行验证。
我使用以下代码来验证证书:

 X509Certificate certFromResponse = //extract from SAML response 
 KeyStore keyStore = getKS();
 PKIXParameters params = new PKIXParameters(keyStore);
 params.setRevocationEnabled(false);
 CertPath certPath = 
 certificateFactory.generateCertPath(Arrays.asList(certFromResponse));
 CertPathValidator certPathValidator = CertPathValidator.getInstance(CertPathValidator.getDefaultType());
 CertPathValidatorResult result = certPathValidator.validate(certPath, params);

这对于根 CA 的证书来说效果很好。
当证书有证书路径时,验证失败。
一种可能的处理方法是手动将路径中的所有证书上传到 JKS 文件
具有不同的别名,然后将它们提取到如下列表中:

List<Certificate> certs = new ArrayList<Certificate>();
certs.add(certFromResponse);
if (keyStore.getCertificate("ALIAS_CA_1") != null) {
    certs.add(keyStore.getCertificate("ALIAS_CA_1"));
}
if (keyStore.getCertificate("ALIAS_CA_2") != null) {
    certs.add(keyStore.getCertificate("ALIAS_CA_2");
}
...
CertPath certPath = certificateFactory.generateCertPath(certs);

有没有更简单的方法?
是否可以从证书本身中提取证书路径?

谢谢!

最佳答案

看来 PKIXParameters 会自动提取证书路径,因此无需手动执行。
我们所要做的就是将所有证书上传到 keystore 。

关于java - 验证认证路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17318717/

相关文章:

java - 在 do ... while() 评估中处理 try/catch 异常的最佳方法?

java - 验证针对凭据的 SAML 断言 - opensaml 3

java - 无法在 SAMLResponse 中获取签名值

java - 将一个对象序列化为多个不同的xml

java - 无法解析导入 javax.servlet 和 org.hibernate - Ubuntu 12.04 上的 Eclipse Kepler

node.js - 是否可以使用 SAML2 在 ReactJs 应用程序中实现 SSO?如果可能怎么办?

Spring Security 和嵌套的 FilterChainProxy 编写 SAML 服务提供者

java - 使用 OpenSaml3.1.1 准备 SAML 身份验证请求

java - java应用程序中重复数组的第一个索引

java - Spring Saml FilterChainProxy 清除上下文 - null 身份验证