2017-02-05 42 views
0

私はtyrus websocketを使ってサーバに接続することができました。tyrus websocket sslハンドシェイクが失敗しました

誰かが原因を知り、解決策やコメントを教えてくれることを願っています。

Iのユーザーガイドがこれです

<dependency> 
    <groupId>org.glassfish.tyrus.bundles</groupId> 
    <artifactId>tyrus-standalone-client</artifactId> 
    <version>1.9</version> 
</dependency> 

"タイラス・クライアント用WebSocket" を使用します。 https://tyrus.java.net/documentation/1.9/user-guide.html#d0e1149

しかし、SSLハンドシェイクは例外に失敗しました。

クライアントとサーバーで同じキーストアを使用しました。 また、すべてtrueを返すようにsetHostVerifierメソッドを試してみてください。

私は、これらのライブラリーの別のvirsionを試してみました。..

が、例外は

を表示している

エラー

javax.websocket.DeploymentException: SSL handshake has failed 
    at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket._connect(GrizzlyClientSocket.java:380) 
    at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket.access$000(GrizzlyClientSocket.java:103) 
    at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket$1.call(GrizzlyClientSocket.java:228) 
    at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket$1.call(GrizzlyClientSocket.java:224) 
    at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket.connect(GrizzlyClientSocket.java:242) 
    at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientContainer.openClientSocket(GrizzlyClientContainer.java:95) 
    at org.glassfish.tyrus.client.ClientManager$3$1.run(ClientManager.java:626) 
    at org.glassfish.tyrus.client.ClientManager$3.run(ClientManager.java:673) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at org.glassfish.tyrus.client.ClientManager$SameThreadExecutorService.execute(ClientManager.java:826) 
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112) 
    at org.glassfish.tyrus.client.ClientManager.connectToServer(ClientManager.java:496) 
    at org.glassfish.tyrus.client.ClientManager.connectToServer(ClientManager.java:312) 
    at com.lge.racss.test.Application2.main(Application2.java:93) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498)[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 8.862 s 
[INFO] Finished at: 2017-02-05T20:03:45+09:00 

    at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem 
    at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1431) 
    at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535) 
    at sun.security.ssl.SSLEngineImpl.writeAppRecord(SSLEngineImpl.java:1214) 
    at sun.security.ssl.SSLEngineImpl.wrap(SSLEngineImpl.java:1186) 
    at javax.net.ssl.SSLEngine.wrap(SSLEngine.java:469) 
    at org.glassfish.grizzly.ssl.SSLConnectionContext.wrap(SSLConnectionContext.java:339) 
    at org.glassfish.grizzly.ssl.SSLUtils.handshakeWrap(SSLUtils.java:298) 
    at org.glassfish.grizzly.ssl.SSLBaseFilter.doHandshakeStep(SSLBaseFilter.java:627) 
    at org.glassfish.grizzly.ssl.SSLFilter.doHandshakeStep(SSLFilter.java:312) 
    at org.glassfish.grizzly.ssl.SSLBaseFilter.doHandshakeStep(SSLBaseFilter.java:552) 
    at org.glassfish.grizzly.ssl.SSLBaseFilter.handleRead(SSLBaseFilter.java:273) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545) 
    ... 1 more 
Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem 
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) 
    at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1728) 
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:304) 
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296) 
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509) 
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216) 
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979) 
    at sun.security.ssl.Handshaker$1.run(Handshaker.java:919) 
    at sun.security.ssl.Handshaker$1.run(Handshaker.java:916) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.security.ssl.Handshaker$DelegatedTask.run(Handshaker.java:1369) 
    at org.glassfish.grizzly.ssl.SSLUtils.executeDelegatedTask(SSLUtils.java:247) 
    at org.glassfish.grizzly.ssl.SSLBaseFilter.doHandshakeStep(SSLBaseFilter.java:638) 
    ... 17 more 
Caused by: java.security.cert.CertificateException: No subject alternative names present 
    at sun.security.util.HostnameChecker.matchIP(HostnameChecker.java:144) 
    at sun.security.util.HostnameChecker.match(HostnameChecker.java:93) 
    at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:455) 
    at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:436) 
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:252) 
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:136) 
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1496) 
    ... 25 more 

クライアントサイト

package com.lge.racss.test; 

import java.io.IOException; 
import java.net.URI; 
import java.security.KeyManagementException; 
import java.security.NoSuchAlgorithmException; 
import java.security.cert.X509Certificate; 

import javax.net.ssl.HostnameVerifier; 
import javax.net.ssl.HttpsURLConnection; 
import javax.net.ssl.SSLContext; 
import javax.net.ssl.SSLSession; 
import javax.net.ssl.TrustManager; 
import javax.net.ssl.X509TrustManager; 
import javax.websocket.ContainerProvider; 
import javax.websocket.DeploymentException; 
import javax.websocket.EncodeException; 
import javax.websocket.WebSocketContainer; 

import org.eclipse.jetty.websocket.api.WebSocketAdapter; 
import org.glassfish.grizzly.ssl.SSLContextConfigurator; 
import org.glassfish.grizzly.ssl.SSLEngineConfigurator; 
import org.glassfish.tyrus.client.ClientManager; 
import org.glassfish.tyrus.client.ClientProperties; 

public class Application2 extends WebSocketAdapter { 

    static { 
     System.out.println("push"); 
     //disableSslVerification(); 
    } 

    private static void disableSslVerification() { 
     try 
     { 
      // Create a trust manager that does not validate certificate chains 
      TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() { 
       public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
        return null; 
       } 
       public void checkClientTrusted(X509Certificate[] certs, String authType) { 
       } 
       public void checkServerTrusted(X509Certificate[] certs, String authType) { 
       } 
      } 
      }; 

      // Install the all-trusting trust manager 
      SSLContext sc = SSLContext.getInstance("SSL"); 
      sc.init(null, trustAllCerts, new java.security.SecureRandom()); 
      HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); 

      // Create all-trusting host name verifier 
      HostnameVerifier allHostsValid = new HostnameVerifier() { 
       public boolean verify(String hostname, SSLSession session) { 
        return true; 
       } 
      }; 

      // Install the all-trusting host verifier 
      HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); 
     } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } catch (KeyManagementException e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) { 

     final WebSocketContainer container = ContainerProvider.getWebSocketContainer(); 

     String url = "wss://10.177.170.140:8443/signaling"; // or 
     // "wss://echo.websocket.org" 
     final ClientManager client = ClientManager.createClient(); 

     System.getProperties().put(SSLContextConfigurator.KEY_STORE_FILE, "/key/server"); 
     System.getProperties().put(SSLContextConfigurator.TRUST_STORE_FILE, "/key/server"); 
     System.getProperties().put(SSLContextConfigurator.KEY_STORE_PASSWORD, "123456"); 
     System.getProperties().put(SSLContextConfigurator.TRUST_STORE_PASSWORD, "123456"); 

     System.out.println("propery : " + System.getProperty(SSLContextConfigurator.KEY_STORE_FILE)); 

     final SSLContextConfigurator defaultConfig = new SSLContextConfigurator(); 

     defaultConfig.retrieve(System.getProperties()); 
     // or setup SSLContextConfigurator using its API. 

     SSLEngineConfigurator sslEngineConfigurator = new SSLEngineConfigurator(defaultConfig, true, false, false); 

     client.getProperties().put(ClientProperties.SSL_ENGINE_CONFIGURATOR, sslEngineConfigurator); 
     System.out.println("put properties"); 
     try (javax.websocket.Session session = client.connectToServer(WebsocketClientEndpoint.class, URI.create(url))) { 
      for (int i = 1; i <= 10; ++i) { 
       try { 
        System.out.println("send"); 
        session.getBasicRemote().sendObject("init"); 
        Thread.sleep(1000); 
       } catch (EncodeException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (DeploymentException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     // Application doesn't exit if container's threads are still running 
     // ((ClientContainer)container).stop(); 
    } 

} 

答えて

1

私はタイラス1.9はいくつかを持っていると思いますSSLで保護された接続に関する問題 Jetty 9.4バージョンを使用して問題を解決しました。 それは明らかだった。

関連する問題