Я успешно создал работающий веб-сервис, клиент и .jsp-управляемый интерфейс. Я сделал это с Eclipse, Axis2, Tomcat 7 и Java 7.
Основной поток состоит в том, что пользователь посещает .jsp и отправляет форму с входными данными. JSP пересылает объект «запрос» клиенту Java. Клиент Java использует веб-сервис и отправляет пользовательский ввод. Служба подключается к базе данных SQL Server через JDBC для получения информации, которая отображается обратно пользователю.
Все это прекрасно работает по HTTP, но теперь я хочу защитить процесс, и именно здесь я сталкиваюсь с проблемами. Я могу создать сертификат и заставить его использовать Tomcat. Я могу подключиться к веб-интерфейсу через HTTPS, отправить форму и получить данные обратно очень хорошо. Проблема в том, что это только защита интерфейса. Код клиента веб-службы все еще подключается к службе через HTTP в фоновом режиме.
Согласно этой странице , все, что мне действительно нужно сделать, чтобы включить службу для подключений через SSL, - это обновить файл axis2.xml и включить новый узел transportReceiver для HTTPS. Я сделал это и восстановил свой клиентский код для использования защищенной конечной точки. Это не работает.
Я настроил Tomcat на прослушивание портов 8081 для http и 8443 для https. Но после изменения axis2.xml и запуска Tomcat я получаю следующее:
[INFO] Прослушивание через порт 8443 [ERROR] Завершение соединения
слушатель
org.apache.axis2.transport.http.server.DefaultConnectionListener@16d60567
после 10 попыток за 0 секунд. java.net.BindException: адрес уже
используется: JVM_Bind на java.net.DualStackPlainSocketImpl.bind0 (Native
Метод) в java.net.DualStackPlainSocketImpl.socketBind (Неизвестно
Источник) в java.net.AbstractPlainSocketImpl.bind (Неизвестный источник) в
java.net.PlainSocketImpl.bind (неизвестный источник) в
java.net.ServerSocket.bind (неизвестный источник) в
java.net.ServerSocket. (Неизвестный источник) в
java.net.ServerSocket. (Неизвестный источник) в
org.apache.axis2.transport.http.server.DefaultConnectionListener.run (DefaultConnectionListener.java:80)
в java.util.concurrent.ThreadPoolExecutor.runWorker (Неизвестный источник)
в java.util.concurrent.ThreadPoolExecutor $ Worker.run (неизвестный источник)
at java.lang.Thread.run (неизвестный источник)
Я попытался изменить номер порта в axis2.xml (например, на 8445), и это работает. Сервер может запускаться без ошибок, но в конечном итоге появляются те же самые ошибки. Например, когда я получаю WSDL, я вижу ошибку через консоль (хотя WSDL действительно появляется). Кроме того, если я пытаюсь использовать службу на порте 8445, я получаю следующую ошибку:
org.apache.axis2.AxisFault: Соединение было отключено:
javax.net.ssl.SSLException: нераспознанное сообщение SSL, открытый текст
подключение
Я могу только предположить, что это потому, что Tomcat настроен для обработки HTTPS на 8443, а не 8445, но я, честно говоря, не знаю.
Если я оставляю порт как 8443 и игнорирую ошибки при запуске, я получаю следующее сообщение при подключении к услуге:
org.apache.axis2.AxisFault: Соединение было отключено:
javax.net.ssl.SSLHandshakeException:
sun.security.validator.ValidatorException: не удалось построить путь PKIX:
sun.security.provider.certpath.SunCertPathBuilderException: невозможно
найти действительный путь сертификации к запрошенной цели
Я выполнил эти шаги , чтобы попытаться заставить его распознать мой сертификат, но при импорте в мое хранилище ключей JRE7 я получаю следующее:
ошибка keytool: java.lang.Exception: ответ сертификата и сертификат
в хранилище ключей идентичны
По сути, этот сертификат уже существует. Это имеет смысл, потому что это тот, который Tomcat уже успешно использует.
Итак, я довольно невежественен на данный момент.Я действительно не уверен, что я должен делать.Любое общее руководство или ссылка на пошаговое руководство было бы очень полезно.
Но для конкретного вопроса ... Что именно я делаю, когда устанавливаю узлы transportReceiver вaxis2.xml?Я говорю, на каких портах работает Tomcat и что он должен использовать, или у Axis2 есть собственные серверы, которые будут запускаться на этих портах?Кажется, это последнее, но это не имеет большого смысла для меня.