1
我使用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);
有没有更简单如何做到这一点?
是否可以从证书本身提取证书路径?
谢谢!