Ошибка службы версии при чистой установке Axis2 на Tomcat - PullRequest
2 голосов
/ 25 августа 2011

Я студент инженерного факультета. Я должен создать веб-сервис. Это должно:

  • использовать HTTPS
  • используйте Gzip для сжатия HTTPS-данных
  • использовать SOAP / WSDL

Я никогда раньше не разрабатывал веб-сервис. Я выбрал Tomcat + Axis для разработки этого проекта.

Моя ОС - Windows 7, я установил Tomcat 6.0 и настроил HTTPS, и он прекрасно работает, когда я пытаюсь получить доступ к Tomcat с помощью браузера. Я также настроил сервер для сжатия Gzip.

Затем я попытался установить Axis, поэтому я скачал axis1.5.4.war и развернул его на сервере. С помощью моего браузера я смог успешно получить доступ к «странице приветствия» Axis, но когда я нажал «Подтвердить», я получил следующее:

Произошла ошибка в службе версии Axis2, возможно, служба недоступна или что-то пошло не так. Но это не значит, что система не работает! Попробуйте загрузить другой сервис и проверить, работает ли он. [Так в оригинале]

Чтобы решить эту проблему, я изменил файл Axis conf на своем сервере для этой документации .

Я получил это на своей консоли Eclipse:

[INFO] Невозможно отправить ViaPost на URL [https://localhost/axis2/services/Version] org.apache.axis2.AxisFault: Соединение было отключено: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: сбой при построении пути PKIX: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации к запрошенной цели

Как мне решить эту проблему?

Ответы [ 4 ]

1 голос
/ 01 ноября 2011

Во-первых, проблема почти наверняка в том, что сертификат, который вы использовали для защиты Tomcat, не подписан стандартным центром сертификации.Это может стоить, но на самом деле это не так много, и это заставляет клиентов работать намного лучше.Если вы используете SSL в режиме клиентского сертификата (не по умолчанию, но его легко включить), то вы должны также настроить Tomcat, чтобы он знал о подписывающем (или подписывающем) клиентских сертификатах - ну,если они не используют стандартные CA.

Возможно, будет проще, если я объясню это так.Когда один конец соединения SSL (или HTTPS) использует криптографический сертификат, чтобы доказать, кто они - серверы всегда делают это и могут запрашивать то же самое у клиентов - другой конец получает целый пакет подписанных утверждений.о том, кто это, но все же необходимо самостоятельно проверить, что эти утверждения верны.Это делается путем проверки, кто подписал утверждения (и несколько других вещей);если он был подписан доверенным лицом, т. е. центром сертификации, то получатель крипто-удостоверения может знать, с кем он действительно общается.

Хотя это слишком упрощенно: срок действия сертификатов истекает, существуют ограничения на использование, могут быть цепочки доверия, и для HTTPS тоже есть дополнительные проверки.И все же, в конечном счете, все сводится к тому, «с кем я разговариваю, и действительно ли я им доверяю?». Криптография очень помогает в этом, но это означает, что требуется корень доверия.По умолчанию клиенту нужен корень доверия (или корни), но с SSL-аутентификацией клиента это обе стороны.

1 голос
/ 16 февраля 2012

Ошибка службы версии довольно распространена, и я столкнулся с точно такой же проблемой на моей новой установке axis2 & tomcat.

Anways, чтобы исправить ошибку службы версий, откройте axis2-web / HappyAxis.jsp и найдите следующую строку кода:

OMNamespace omNs = fac.createOMNamespace("http://axisversion.sample/xsd", "ns1");

Изменить вышеприведенную строку следующим образом:

OMNamespace omNs = fac.createOMNamespace("http://axisversion.sample", "ns1");
0 голосов
/ 14 августа 2012

Ссылка: http://axis.apache.org/axis2/java/core/docs/servlet-transport.html

Для каждого протокола (HTTP и / или HTTPS) экземпляр AxisServletListener должен быть объявлен в axis2.xml. Если используется только один протокол, дальнейшая настройка не требуется. Например, если используется только HTTP, в axis2.xml должно присутствовать следующее объявление:

<transportReceiver name="http" class="org.apache.axis2.transport.http.AxisServletListener"/>

Если используются как HTTP, так и HTTPS, то все становится немного сложнее. Причина в том, что для предоставления WSDL с правильными URI конечной точки AxisServlet должен знать порты, используемые HTTP и HTTPS. К сожалению, API сервлета не позволяет веб-приложению обнаруживать все настроенные протоколы. Он предоставляет только информацию о протоколе, имени хоста и порте для текущего запроса. Если настроен только один AxisServletListener, то этой информации достаточно, чтобы AxisServlet автоматически определил номер порта. Если используются как HTTP, так и HTTPS (или если WSDL извлекаются через транспорты, отличные от AxisServlet), то AxisServlet не может узнать номера портов, пока не обработает хотя бы один запрос для каждого протокола. Чтобы сделать генерацию WSDL предсказуемой в этом сценарии, необходимо явно настроить номера портов в axis2.xml, например, в следующем примере:

<transportReceiver name="http" class="org.apache.axis2.transport.http.AxisServletListener">
    <parameter name="port">80</parameter>
</transportReceiver>

<transportReceiver name="https" class="org.apache.axis2.transport.http.AxisServletListener">
    <parameter name="port">443</parameter>
</transportReceiver>
0 голосов
/ 25 августа 2011

Вы получаете это, потому что сертификат, который вы использовали для защиты службы axis2, не является доверенным. Вам необходимо импортировать этот открытый сертификат или сертификат CA, который подписал его, в хранилище ключей и установить следующие два системных свойства - в коде вашего клиента

System.setProperty("javax.net.ssl.trustStore", "path/to/keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "keystore_password");
...