2009-09-09 2 views
0

Я пытался проверить подпись XML.Проверка цифровой подписи XML

Валидация в соответствии с этим tutorial работает нормально.

Но я также попытался сделать второй подход. Для того, чтобы проверить его с verify method класса Signature я извлёк подпись и сертификат из файла 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; 
} 

результат был ложным. Подпись не подтвердила. Что может быть причиной этого?

+0

Ссылка на учебное пособие, похоже, не работает. – Yster

+0

Это, вероятно, новый: http://www.oracle.com/technetwork/articles/javase/dig-signature-api-140772.html – Yster

ответ

2

Вы не можете проверить XMLDsig следующим образом. Это не сработает. Подпись не вычисляется по необработанному XML. Он должен пройти канонизацию, дайджест и т. Д.

Что вы используете для data[]? Чтобы все было правильно, вам почти нужно переписать библиотеку XMLDsig.

+0

данные [] - это фактически файл, который подписан. Я проверил, что он имеет тот же дайджест, что и дайджест в подписи xml. Таким образом, дайджесты одинаковы. И вот почему мне любопытно, почему проверка не работает – iffi

+0

Итак, файл XMLDsig подписан XML-файл? Тогда у вас будет подпись внутри файла, верно? Будет ли это проблемой куриного яйца, если вы можете просто проверить весь файл :) –

+0

Я знаю, что это немного поздно ... но как вы используете дайджест? –

0

Если данные [] являются содержимым подписанного файла XML, что такое sigToVerify?

XMLSig создает элемент подписи (SignedInfo), содержащий дайджест каждого элемента, который должен быть подписан, и метаинформацию, как используемые алгоритмы канонизации/преобразования. Затем вычисляется и подписывается сборник этого SignedInfo-Elemnt.

Следовательно, если sigToVerify является сигнатурой, созданной реализацией XMLSignature, она не должна быть равна сигнатуре полного файла XML.

Here более полное объяснение. И если вы заинтересованы, посмотрите на specification.

Смежные вопросы