2013-06-26 78 views
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); 

有没有更简单如何做到这一点?
是否可以从证书本身提取证书路径?

谢谢!

回答

1

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