我用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);
有更简单的方法吗?
是否可以从证书本身中提取证书路径?
谢谢!
答案 0 :(得分:1)
似乎PKIXParameters会自动提取证书路径,因此无需手动完成 我们所要做的就是将所有证书上传到密钥库。