#java #web-services #soap #digital-signature
#java #веб-сервисы #soap #цифровая подпись
Вопрос:
16:56:06,477 DEBUG DOMReference:398 - Expected digest: 3BXXHthnTP9kC1YB6FPUrpnO72wNuPmWerwglakCGiY=
16:56:06,477 DEBUG DOMReference:399 - Actual digest: hesLZ/G8ekBPdFNGrxIJmxSYhhMC/BBHD6x/pHqXJt4=
16:56:06,477 DEBUG DOMXMLSignature:276 - Reference[#Body] is valid: false
У меня есть веб-сервис, выполненный в CXF, и я создал клиент, просто используя утилиты javax.xml.crypto
package. На стороне клиента, когда я проверяю действительность подписи, она говорит, что она действительна. Где у меня есть дайджест раздела тела как «3BXXHhtnTP9kC1YB6FPUrpnO72wNuPmWerwglakCGiY =».
Затем отправляется сгенерированное SOAP-сообщение, и на стороне веб-службы говорится, что фактический дайджест — это что-то другое, но не то, что я получил на стороне клиента.
Кто-нибудь может пролить свет на это? Спасибо
Ответ №1:
Я читал сообщение SOAP из файла. Были некоторые символы, отличные от UTF8, которые были включены в дайджест. Однако я канонизировал перед дайджестом, который должен исправить такого рода проблемы. Код изменен для чтения только данных UTF-8, и это устранило проблему.
File attachmentFile = new File("soap_sample.xml");
FileInputStream fis = new FileInputStream(attachmentFile);
InputStreamReader isr = new InputStreamReader(fis, "UTF8");
BufferedReader in = new BufferedReader(isr);
StringBuffer buffer = new StringBuffer();
String inputLine = null;
while ((inputLine = in.readLine()) != null) {
buffer.append(inputLine);
}
InputStream is = IOUtils.toInputStream(buffer.toString(), "UTF-8");
SOAPMessage soapMessage = MessageFactory.newInstance().createMessage(new MimeHeaders(), is);