Java Secure Webservice - PullRequest
       7

Java Secure Webservice

1 голос
/ 02 февраля 2010

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

@SecurityDomain(value = "jboss-ssl")

и

@WebContext(contextRoot="/path/one",  // already here
 urlPattern="/X",   // already here
    authMethod = "CLIENT-CERT",  // added
    transportGuarantee = "CONFIDENTIAL") // added

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

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

(вся вещь показана ниже).Я подозреваю, что это связано с используемым сертификатом.Я думаю, что мне нужно использовать 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 <hostname>.
        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 <hostname>
        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

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

hostname[username:/path/two/path][525]% keytool -genkey -keystore server.keystore -alias hostname
...
...

Обновление 2

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

обновление 3

Я указал имя хоста в качестве имени псевдонима

и

What is the name of your organizational unit?
  [Unknown]:  hostname

Но это все равно не решило мою проблему.Есть ли конкретный способ добавить имя хоста?


Я почти уверен, что этот пост решает проблему, однако он слишком загадочный, чтобы его понимать.Вернись к этому.

http://forums.sun.com/thread.jspa?threadID=5315653

Ответы [ 2 ]

3 голосов
/ 03 февраля 2010

Это решение также полезно.

Команда Java keytool с IP-адресами

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;

HostnameVerifier hv = new HostnameVerifier() {
    public boolean verify(String urlHostName, SSLSession session) {
        System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
        return true;
    }
};

HttpsURLConnection.setDefaultHostnameVerifier(hv);
2 голосов
/ 02 февраля 2010

Это похоже на похожие проблемы:

Ссылка 1

Та же проблема.

Ссылка 2

Принимает все сертификаты.

private static final HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
   public boolean verify(String hostname, SSLSession session) {
      return true;
   }
};
...
HttpsUrlConnection con = (HttpsUrlConnection)new URL("https://foo.bar.com").openConnection();
con.setHostnameVerifier(DO_NOT_VERIFY);
InputStream in = con.getInputStream();

Однако я не уверен, где это поставить. Клиентская или серверная сторона? В любом случае, я бы предпочел просто правильно настроить сертификаты, если это возможно.

Ссылка 3

Использует это решение:

HostnameVerifier ver = new HostnameVerifier()
{
  public boolean verify(String urlHostname,String certHostname)
  {
    return java.net.InetAddress.getByName(urlHostname).equals(java.net.InetAddress.getByName(certHostname));
  }
};
com.sun.net.ssl.HttpsURLConnection con = ...(obtain connection);
con.setHostnameVerifier(ver);

Однако я не уверен, где это поставить. Клиентская или серверная сторона? В любом случае, я бы предпочел просто правильно настроить сертификаты, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...