簡體   English   中英

XML數字簽名驗證

[英]XML Digital Signature validation

我正在嘗試驗證XML簽名。

根據本教程進行的驗證工作正常。

但是我也嘗試了第二種方法。 為了使用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創建一個Signature-Element(SignedInfo),其中包含要簽名的每個Element的摘要以及類似於所使用的規范化/轉換算法的元信息。 然后,計算並簽名此SignedInfo-Elemnt的摘要。

因此,如果sigToVerify是XMLSignature實現創建的簽名,則它不得等於完整XML文件的簽名。

是更完整的說明。 如果您有興趣,請看一下規范

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM