Назад | Перейти на главную страницу

Безопасный веб-сервис Java

(Я репостю этот вопрос из stackoverflow. Если есть способ присоединиться к вопросам или просто переместить вопрос, дайте мне знать. Спасибо.)

Я пытаюсь преобразовать веб-службу http в https. Я добавил теги в веб-сервис.

@SecurityDomain(value = "jbossws-ssl")

и

@WebContext(contextRoot="/common/ws",  // already here
 urlPattern="/A2",   // already here
    authMethod = "CLIENT-CERT",  // added
    transportGuarantee = "CONFIDENTIAL") // added

Но когда мой клиент пытается подключиться к https://host:80/path/to/ws У меня исключение:

Caused by: java.io.IOException: HTTPS hostname wrong: should be <host>.

(все показано ниже). Я подозреваю, что это связано с используемым сертификатом. Я думаю, что мне нужно использовать java keytool, чтобы решить эту проблему. Если бы кто-то мог проверить для меня, это было бы очень признательно.

javax.xml.soap.SOAPException: java.io.IOException: Could not transmit message
        at org.jboss.ws.core.soap.SOAPConnectionImpl.callInternal(SOAPConnectionImpl.java:115)
        at org.jboss.ws.core.soap.SOAPConnectionImpl.call(SOAPConnectionImpl.java:66)
        at com.alcatel.tpapps.common.utils.SOAPClient.execute(SOAPClient.java:146)
        at com.alcatel.tpapps.common.utils.SOAPClient.main(SOAPClient.java:233)
Caused by: java.io.IOException: Could not transmit message
        at org.jboss.ws.core.client.RemotingConnectionImpl.invoke(RemotingConnectionImpl.java:192)
        at org.jboss.ws.core.client.SOAPRemotingConnection.invoke(SOAPRemotingConnection.java:77)
        at org.jboss.ws.core.soap.SOAPConnectionImpl.callInternal(SOAPConnectionImpl.java:106)
        ... 3 more
Caused by: org.jboss.remoting.CannotConnectException: Can not connect http client invoker. HTTPS hostname wrong:  should be <host>.
        at org.jboss.remoting.transport.http.HTTPClientInvoker.useHttpURLConnection(HTTPClientInvoker.java:368)
        at org.jboss.remoting.transport.http.HTTPClientInvoker.transport(HTTPClientInvoker.java:148)
        at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:141)
        at org.jboss.remoting.Client.invoke(Client.java:1858)
        at org.jboss.remoting.Client.invoke(Client.java:718)
        at org.jboss.ws.core.client.RemotingConnectionImpl.invoke(RemotingConnectionImpl.java:171)
        ... 5 more
Caused by: java.io.IOException: HTTPS hostname wrong:  should be <host>
        at sun.net.www.protocol.https.HttpsClient.checkURLSpoofing(HttpsClient.java:490)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:415)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:170)
        at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:857)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)
        at org.jboss.remoting.transport.http.HTTPClientInvoker.useHttpURLConnection(HTTPClientInvoker.java:288)
        ... 10 more

Обновление 1

Я пробовал следующее, но это не повлияло на исключение:

host[user:/path][525]% keytool -genkey -keystore server.keystore -alias host
...
...

Обновление 2

На самом деле не уверен, что то, что я сделал в обновлении 1, было правильным, потому что мне не нужно было указывать там имя хоста ...

сообщение об ошибке жалуется на ваш порт. http обычно работает на порту 80 и https на порту 443. вы пытаетесь использовать https на порту 80. измените свой вызов с

https://sco-up:80/path/to/ws

к

https://sco-up/path/to/ws

это автоматически будет использовать порт 443 для https-соединения.