同じキーストア(およびXA)を使用する前に作成した署名を検証すると、次の例外が発生します。
プロパティ'SigningCertificate'の検証に失敗しました:SigningCertificateプロパティに、証明書パスの一部ではない1つ以上の証明書が含まれています。
私は次の証明書チェーンを使用しています:
- ルート-CA(globalsign)、
- 中間証明書
- 会社の証明書
- プロジェクト証明書
すべての証明書は、使用済みのキーストアに保存されます。
ただし、自己署名証明書で同じことを試してみると、それだけが機能し、証明書をcerts-and-crls-directoryにも配置する必要がありました。
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;
}
キーストアに関するフィードバック
signing-keystoreには、4つの証明書がすべて含まれています。検証キーストアには、ルート証明書(globalsign-root-ca)のみが含まれます。certs-directoryには、ルート(globalsign-root-ca)以外のすべての証明書が含まれています。次に、次のエラーが発生します。
原因:sun.security.provider.certpath.SunCertPathBuilderException:要求されたターゲットへの有効な認証パスが見つかりません
署名(ファイルシステムコピー)と同じキーストアを使用すると、次のエラーが発生します。
原因:xades4j.verification.SigningCertificateCertsNotInCertPathException:プロパティ'SigningCertificate'の検証に失敗しました:SigningCertificateプロパティに、証明書パスの一部ではない1つ以上の証明書が含まれています。