Вызов защищенного веб-сервиса в Java - PullRequest
5 голосов
/ 07 декабря 2010

Мне нужно написать клиент веб-сервиса для вызова стороннего веб-сервиса (на основе SOAP).Третья сторона опубликовала wsdl и связанные файлы xsd.

Третьи лица защищают свой веб-сайт и службы с помощью сертификатов .p12

Я использовал wsdl2java для создания своих заглушек.Я изменил конечные точки и позвонил в сервис.Я получил следующую ошибку:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header></SOAP-ENV:Header>
   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">wsse:InvalidSecurity</faultcode>
         <faultstring>SECU1075: An error was discovered processing the &lt;wsse:Security> header</faultstring>
         <detail>SECU3510: Signature requirements validation failed: Element (/soapenv:Envelope/soapenv:Body) was not signed</detail>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Хммм, ок.Имеет смысл, что я должен подписывать документ.

Странная часть (для меня) в том, что в файле WSDL нет определения безопасности.Это нормально?Я связался с третьей стороной, и они прислали мне PDF-файл о том, как должно выглядеть сообщение SOAP.В заголовке отображаются следующие теги: содержащие:

<wsse:BinarySecurityToken>

и

<dsig:SignedInfo>

, поэтому, исходя из того, что я собираю, для этого требуется мой сертификат и некоторые цифровые подписи.Может кто-нибудь порекомендовать, как сгенерировать их в Java?Я начал с пути Axis2 / Rampart, но, честно говоря, похоже, что они основаны на определении требований безопасности в файле WSDL (поправьте меня, если я ошибаюсь).

1 Ответ

4 голосов
/ 07 декабря 2010

Похоже, вам нужно подписать ваше сообщение, используя стандарт WS-Security. Стандарт безопасности WS не устанавливает сопоставления безопасности с файлом wsdl. Некоторые приложения используют политику WS-Security и WS-Policy Attachement в сочетании с Ws-security. Приложение WS-Policy действительно определяет способ сопоставления политик с WSDL.

Подробнее об этих стандартах вы можете узнать на w3.org

И да, вы на правильном пути, можете использовать WSS4J или ось вала по своему выбору.

...