Я успешно создал рабочий веб-сервис, клиент и интерфейс с интерфейсом .jsp. Я сделал это с Eclipse, Axis2, Tomcat 7 и Java 7.Проблема с обеспечением веб-службы Tomcat/Axis2 через SSL
Основной поток - это то, что пользователь посещает .jsp и отправляет форму с входными данными. JSP перенаправляет объект запроса на клиент Java. Клиент Java использует веб-службу и отправляет пользовательский ввод. Служба подключается к базе данных SQL Server через JDBC для получения информации, которая отображается обратно пользователю.
Все это работает отлично по HTTP, но теперь я хочу, чтобы обеспечить процесс, и это то, где я столкнулся с проблемами. Я могу создать сертификат и заставить Tomcat использовать его. Я могу подключиться к веб-интерфейсу через HTTPS и отправить форму и получить данные обратно в порядке. Проблема в том, что это только защита интерфейса. Клиентский код веб-сервиса по-прежнему подключается к службе через HTTP в фоновом режиме.
Согласно this page, все, что мне действительно нужно сделать, чтобы включить мой сервис для подключения через SSL, - это обновить файл axis2.xml и включить новый узел «transportReceiver» для HTTPS. Я сделал это и восстановил код моего клиента, чтобы использовать безопасную конечную точку. Это не работает.
Я сконфигурировал Tomcat для прослушивания портов 8081 для http и 8443 для https. Но после изменения axis2.xml, чтобы соответствовать, и запуска Tomcat, я получаю следующее:
[INFO] Listening on port 8443 [ERROR] Terminating connection listener org.apache.axis2.transport.http.server.DefaultConnect[email protected] after 10retries in 0 seconds. java.net.BindException: Address already in use: JVM_Bind at java.net.DualStackPlainSocketImpl.bind0(Native Method) at java.net.DualStackPlainSocketImpl.socketBind(Unknown Source) at java.net.AbstractPlainSocketImpl.bind(Unknown Source) at java.net.PlainSocketImpl.bind(Unknown Source) at java.net.ServerSocket.bind(Unknown Source) at java.net.ServerSocket.(Unknown Source) at java.net.ServerSocket.(Unknown Source) at org.apache.axis2.transport.http.server.DefaultConnectionListener.run(DefaultConnectionListener.java:80) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
Я попытался изменить номер порта в axis2.xml (например, в 8445), и что-то работ , Сервер может начать чистку, но, в конце концов, те же самые ошибки начинают появляться. Например, когда я извлекаю WSDL, я вижу ошибку через консоль (хотя WSDL действительно появляется). Кроме того, если я пытаюсь реально использовать сервис, когда на порту 8445, я получаю следующее сообщение об ошибке:
org.apache.axis2.AxisFault: Connection has been shutdown: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
Я могу только предположить, что это потому, что Tomcat настроен для обработки HTTPS на 8443, а не 8445, но я честно не знаю.
Если я покинуть порт, как 8443 и игнорировать ошибки при запуске, я получаю следующее сообщение при подключении к услуге:
org.apache.axis2.AxisFault: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Я последовал these steps, чтобы попытаться заставить его признать свой сертификат, но при ввозе его в моем JRE7 хранилище, я получаю следующее:
keytool error: java.lang.Exception: Certificate reply and certificate in keystore are identical
в принципе, что сертификат уже есть. Это имеет смысл, потому что это тот, который Tomcat уже успешно использует.
Итак, я довольно невежественный в этот момент. Я действительно не уверен, что я должен делать. Любое общее руководство или ссылка на пошаговое руководство будут действительно полезны.
Но для конкретного вопроса ... Что, собственно, я делаю, когда устанавливаю узлы transportReceiver в axis2.xml? Я рассказываю, какие порты Tomcat работают и что он должен использовать, или у Axis2 есть свои собственные серверы, которые будут запускаться на этих портах? Кажется, последнее, но это не имеет для меня большого смысла.
Да, это было! Я изменил записи transportReceiver для использования AxisServletListener и решил проблемы с портом. Благодаря! –