验证证书路径

时间:2013-06-26 11:24:24

标签: java saml-2.0 opensaml

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

 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);

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

谢谢!

1 个答案:

答案 0 :(得分:1)

似乎PKIXParameters会自动提取证书路径,因此无需手动完成 我们所要做的就是将所有证书上传到密钥库。