当我验证我在使用相同的密钥库(和XA)之前创建的签名时,会出现以下异常:
属性“SigningCertificate”的验证失败:SigningCertificate属性包含一个或多个不属于证书路径的证书。
我正在使用以下证书链:
所有证书都存储在使用过的密钥库中。
但是,当使用自签名证书尝试相同的操作时,只有它可以工作,我只需要将证书放在certs-and-crls目录中。
KeyingDataProvider:
new FileSystemKeyStoreKeyingDataProvider(KeyStore.getDefaultType(),
"D:\...\signing.keystore",
new FirstCertificateSelector(),
new DirectStorePasswordProvider("pass"),
new DirectKeyPasswordProvider("pass"), true);
CertificateValidationProvider:
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;
}
对密钥库的反馈
signed-keystore包含所有4个证书。 verify-keystore仅包含根证书(globalsign-root-ca)。 certs-directory包含除root(globalsign-root-ca)之外的所有证书。然后我收到以下错误:
引起:sun.security.provider.certpath.SunCertPathBuilderException: 无法找到所请求目标的有效证书路径
当使用与签名相同的密钥库(文件系统副本)时,我收到错误:
引起: xades4j.verification.SigningCertificateCertsNotInCertPathException: 属性'SigningCertificate'的验证失败: SigningCertificate属性包含一个或多个证书 不属于认证途径。
答案 0 :(得分:0)
我终于明白了(即一位同事帮助我)。
我以前用自己创建的密钥对(#4)签名的证书/密钥(#3)不允许签署其他证书。尽管可以在没有任何错误的情况下创建签名,但在验证签名时收到错误消息unable to find valid certification path to requested target
,这是非常误导的。
作为“解决方案”,我只使用证书#1-3,并使用#3的私钥创建签名。
@lgoncalves感谢您的持久帮助。
PS:当我配置启用CRL时,我得到了与我的工作设置相同的错误消息,但是没有提供所有这些消息(即,当验证生成的签名时,#1发出的一个CRL和#1发出的一个CRL #3)。