当我验证在使用相同密钥库(和 XA)之前创建的签名时,会出现以下异常:
属性“SigningCertificate”的验证失败:SigningCertificate 属性包含一个或多个不属于证书路径的证书。
我正在使用以下证书链:
- 根 CA (globalsign),
- 中级证书
- 公司证书
- 项目证书
所有证书都存储在使用的密钥库中。
但是,当使用自签名证书尝试相同的事情时,只有它有效,我只需要将证书也放入 certs-and-crls-directory 中。
键控数据提供者:
new FileSystemKeyStoreKeyingDataProvider(KeyStore.getDefaultType(),
"D:\...\signing.keystore",
new FirstCertificateSelector(),
new DirectStorePasswordProvider("pass"),
new DirectKeyPasswordProvider("pass"), true);
证书验证提供者:
FileSystemDirectoryCertStore certStore = new FileSystemDirectoryCertStore("D:\...\certs");
CertificateValidationProvider certValidator = new PKIXCertificateValidationProvider(
loadKeystore(),
false, // should be true, when validation works.
certStore.getStore());
private KeyStore loadKeystore() {
// deleted exception handling for readability, here
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
FileInputStream keystoreInStream = new FileInputStream("D:\...\verification.keystore");
keyStore.load(keystoreInStream, "pass".toCharArray());
return keyStore;
}
对密钥库的反馈
签名密钥库包含所有 4 个证书。验证密钥库仅包含根证书 (globalsign-root-ca)。certs 目录包含除根 (globalsign-root-ca) 之外的所有证书。然后我收到以下错误:
原因:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径
当使用与签名相同的密钥库(文件系统副本)时,我收到错误:
原因:xades4j.verification.SigningCertificateCertsNotInCertPathException:属性“SigningCertificate”的验证失败:SigningCertificate 属性包含一个或多个不属于证书路径的证书。