2017-01-04 2 views
0

Я работаю над задачей вызвать web-сервис через https. Сам WSDL содержит следующую информацию о безопасности -Как добавить безопасность в webservice программно

<wsid:Identity xmlns:wsid="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity"> 
<dsig:KeyInfo xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"> 
<dsig:X509Data> 
<dsig:X509Certificate> 
**XXX** 
</dsig:X509Certificate> 
<dsig:X509IssuerSerial>...</dsig:X509IssuerSerial> 
<dsig:X509SubjectName>CN=FAEncryption, DC=cloud, DC=oracle, DC=com</dsig:X509SubjectName> 
<dsig:X509SKI>**ZZZ**</dsig:X509SKI> 
<dsig:X509Certificate> 
**YYY** 
</dsig:X509Certificate> 
</dsig:X509Data> 
</dsig:KeyInfo> 
</wsid:Identity> 

Теперь, используя эту информацию, я пришел с сертификатом с помощью следующей процедуры -

  1. Создать новый файл с любым именем вы хотите. Вы должны изменить расширение на .cer, чтобы указать, что это файл сертификата.

  2. Используя текстовый редактор, откройте только что созданный файл и введите «----- BEGIN CERTIFICATE -----» в первой строке.

  3. В следующей строке скопируйте закодированный в Base64 сертификат из WSDL-файла службы в только что созданный файл сертификата.

  4. Добавить «----- END CERTIFICATE -----» на новую строку и сохранить файл. Теперь у вас есть сертификат, содержащий открытый ключ с сервера.

  5. Откройте командную строку и смените каталог на $ JAVA_HOME/bin. Используйте следующую команду для создания KeyStore и импорта открытого ключа из сертификата.

Если вы заметили, что в wsdl есть два сертификата. Я добавил их в хранилище ключей. Эти команды -

Keytool -import -file ~/ddrive/тест/подробности/SubmitFlow.cer -alias orakey1 -keypass приветствовать -keystore ~ ​​/ ddrive/тест/подробности/test.jks -storepass Добро пожаловать

keytool -import -file ~/ddrive/test/details/SubmitFlow1.cer -alias orakey1 -keypass welcome -keystore ~ ​​/ ddrive/test/details/test.jks -storepass welcome

Первоначально я добавил только одну из сертификаты. Но позже я добавил их обоих. Я использую spring-ws для вызова webservice. Однако я все еще получаю 401 несанкционированный звонок.

У меня нет документа, который иллюстрирует, что нужно сделать. Было бы здорово, если бы кто-нибудь мог направить меня сюда. Кстати, в случае, если это помогает, этот веб-сервис связан с Oracle HCM.

ответ

0

Короче говоря, вы импортировали сертификат WSDL в JKS, но не используете его, поэтому он не имеет никакого эффекта.

Но это не проблема. Фактически теги <wsid:Identity> предоставляют информацию о том, как вы можете проверить личность конечной точки, но не о том, как конечная точка проверяет вас.

A 401-Unauthorized означает, что вы не указали свои ведомости. Сначала вам нужно знать, как выполнить аутентификацию на веб-сервере: имя пользователя-пароль, цифровую подпись и т. Д.

В некоторых случаях сам WSDL включает в себя <wsp:Policy>, которые включают ожидаемый метод аутентификации. В других случаях просто посмотрите документацию. Я предлагаю создать заглушку с вашим предпочтительным инструментом wsdl2java, который, вероятно, правильно сгенерирует код для работы с wsp:policy

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