0

同じキーストア(およびXA)を使用する前に作成した署名を検証すると、次の例外が発生します。

プロパティ'SigningCertificate'の検証に失敗しました:SigningCertificateプロパティに、証明書パスの一部ではない1つ以上の証明書が含まれています。

私は次の証明書チェーンを使用しています:

  1. ルート-CA(globalsign)、
  2. 中間証明書
  3. 会社の証明書
  4. プロジェクト証明書

すべての証明書は、使用済みのキーストアに保存されます。

ただし、自己署名証明書で同じことを試してみると、それだけが機能し、証明書を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つ以上の証明書が含まれています。

4

1 に答える 1

0

私はついにそれを理解しました(つまり、同僚が私を助けてくれました)。自分で作成したキーペア(#4)に署名するために使用した証明書/キー(#3)は、他の証明書に署名することを許可されていませんでした。署名の作成はエラーなしで可能でしたが、unable to find valid certification path to requested target署名を確認するときにエラーメッセージが表示され、かなり誤解を招く恐れがありました。

「解決策」として、私は証明書#1〜3のみを使用し、#3の秘密鍵を使用して署名を作成しました。

@lgoncalvesあなたの永続的な助けに感謝します。

PS:CRLを有効に設定すると、作業セットアップで同じエラーメッセージが表示されますが、すべてを提供するわけではありません(つまり、#3で生成された署名を検証するときに#2によって発行されたCRLと#1によって発行されたCRL) 。

于 2012-10-08T08:33:01.357 に答える