質問

XML署名を検証しようとしていました。

このチュートリアルによる検証罰金。

しかし、私も2番目のアプローチを試みました。 Signatureクラスのverifyメソッド xmlファイルから署名と証明書を抽出し、次のことを行いました。

    public static boolean checkSignedFile(byte[] data, byte[] sigToVerify,
        byte[] cert, String algorithm) throws CertificateException,
        NoSuchAlgorithmException, InvalidKeyException, SignatureException {
    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    Certificate c = (Certificate) cf
            .generateCertificate(new ByteArrayInputStream(cert));
    PublicKey pk = c.getPublicKey();
    Signature sig;
    boolean verifies = false;
    sig = Signature.getInstance(algorithm);
    sig.initVerify(pk);
    sig.update(data);
    verifies = sig.verify(sigToVerify);
    return verifies;
}

結果は偽でした。署名は検証されませんでした。その理由は何ですか?

役に立ちましたか?

解決

このようにXMLDsigを検証することはできません。うまくいきません。署名は未加工のXMLに対して計算されません。正規化、ダイジェストなどを行う必要があります。

data [] には何を使用しますか?正しくするには、XMLDsigライブラリを書き直す必要があります。

他のヒント

data []が署名済みXMLファイルのコンテンツである場合、sigToVerifyとは何ですか?

XMLSigは、署名される各要素のダイジェストと、正規化/変換アルゴリズムのようなメタ情報を含む署名要素(SignedInfo)を作成します。次に、このSignedInfo-Elemntのダイジェストが計算され、署名されます。

したがって、sigToVerifyがXMLSignature実装によって作成された署名である場合、完全なXMLファイルの署名と同じであってはなりません。

ここはより完全な説明。興味がある場合は、仕様をご覧ください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top