【问题标题】:Jetty WebsocketClient does not connect with SSL on androidJetty WebsocketClient 无法在 android 上连接 SSL
【发布时间】:2015-07-11 14:34:13
【问题描述】:

我有一个问题,感谢任何帮助。我的测试设备是 ASUS Nexus 7 Android 5.1。我想使用 Jetty Websockets 连接到网络服务器。 url 使用的是 wss,我在 manifest.xml 文件中编辑了互联网权限。代码如下:

import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.WebSocketAdapter;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;

/**
 * Created by Christian on 10.07.2015.
 */
public class Socket extends WebSocketAdapter {
    private static final Logger LOG = Log.getLogger(Socket.class);

    @Override
    public void onWebSocketConnect(Session session) {
        super.onWebSocketConnect(session);
        LOG.info("onConnect({})", session);
    }

    @Override
    public void onWebSocketText(String message) {
        super.onWebSocketText(message);
        LOG.info("onMessage() - {}", message);
    }

    @Override
    public void onWebSocketClose(int statusCode, String reason) {
        super.onWebSocketClose(statusCode, reason);
        LOG.info("onClose({}, {})", statusCode, reason);

    }

    @Override
    public void onWebSocketError(Throwable cause) {
        super.onWebSocketError(cause);
        LOG.warn(cause);
    }
}

这是 websocket 类。我正在我的 android 应用程序的 MainActivity 中启动 websocket 客户端:

URI uri = URI.create("wss://localhost:8600");
        SslContextFactory ssl = new SslContextFactory();
        ssl.setTrustAll(true);
        WebSocketClient client = new WebSocketClient(ssl);

        try {
            client.start();
            Socket socket = new Socket();
            ClientUpgradeRequest request = new ClientUpgradeRequest();
            Future<Session> fut = client.connect(socket, uri);
        } catch (Throwable t) {

            LOG.warn(t);
        }

编译后记录器显示以下错误,我假设服务器无法连接到服务器。

07-11 16:23:50.175  10167-10167/programmieren2.simplechat W/System.err﹕ Defaulting Uptime to NOIMPL due to (java.lang.UnsupportedOperationException) Implementation not available in this environment
07-11 16:23:50.201  10167-10167/programmieren2.simplechat W/System.err﹕ 2015-07-11 16:23:50.200:INFO::main: Logging initialized @-1ms
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ 2015-07-11 16:23:50.450:WARN:oejuc.AbstractLifeCycle:main: FAILED SslContextFactory@da9981a(null,null): java.lang.NoSuchMethodError: No virtual method setEndpointIdentificationAlgorithm(Ljava/lang/String;)V in class Ljavax/net/ssl/SSLParameters; or its super classes (declaration of 'javax.net.ssl.SSLParameters' appears in /system/framework/core-libart.jar)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ java.lang.NoSuchMethodError: No virtual method setEndpointIdentificationAlgorithm(Ljava/lang/String;)V in class Ljavax/net/ssl/SSLParameters; or its super classes (declaration of 'javax.net.ssl.SSLParameters' appears in /system/framework/core-libart.jar)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.ssl.SslContextFactory.customize(SslContextFactory.java:1382)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.ssl.SslContextFactory.newSSLEngine(SslContextFactory.java:1328)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.ssl.SslContextFactory.doStart(SslContextFactory.java:309)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.websocket.client.WebSocketClient.doStart(WebSocketClient.java:256)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at com.example.khodor.simplechatneuerversuch.MainActivity.onCreate(MainActivity.java:62)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.Activity.performCreate(Activity.java:5990)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.ActivityThread.access$800(ActivityThread.java:151)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at android.os.Looper.loop(Looper.java:135)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5254)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
07-11 16:23:50.451  10167-10167/programmieren2.simplechat W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ 2015-07-11 16:23:50.452:WARN:oejuc.AbstractLifeCycle:main: FAILED org.eclipse.jetty.websocket.client.WebSocketClient@25ca86c5: java.lang.NoSuchMethodError: No virtual method setEndpointIdentificationAlgorithm(Ljava/lang/String;)V in class Ljavax/net/ssl/SSLParameters; or its super classes (declaration of 'javax.net.ssl.SSLParameters' appears in /system/framework/core-libart.jar)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ java.lang.NoSuchMethodError: No virtual method setEndpointIdentificationAlgorithm(Ljava/lang/String;)V in class Ljavax/net/ssl/SSLParameters; or its super classes (declaration of 'javax.net.ssl.SSLParameters' appears in /system/framework/core-libart.jar)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.ssl.SslContextFactory.customize(SslContextFactory.java:1382)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.ssl.SslContextFactory.newSSLEngine(SslContextFactory.java:1328)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.ssl.SslContextFactory.doStart(SslContextFactory.java:309)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.websocket.client.WebSocketClient.doStart(WebSocketClient.java:256)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at com.example.khodor.simplechatneuerversuch.MainActivity.onCreate(MainActivity.java:62)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.Activity.performCreate(Activity.java:5990)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.ActivityThread.access$800(ActivityThread.java:151)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at android.os.Looper.loop(Looper.java:135)
07-11 16:23:50.452  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5254)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ 2015-07-11 16:23:50.453:WARN:ceks.MainActivity:main:
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ java.lang.NoSuchMethodError: No virtual method setEndpointIdentificationAlgorithm(Ljava/lang/String;)V in class Ljavax/net/ssl/SSLParameters; or its super classes (declaration of 'javax.net.ssl.SSLParameters' appears in /system/framework/core-libart.jar)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.ssl.SslContextFactory.customize(SslContextFactory.java:1382)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.ssl.SslContextFactory.newSSLEngine(SslContextFactory.java:1328)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.ssl.SslContextFactory.doStart(SslContextFactory.java:309)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.websocket.client.WebSocketClient.doStart(WebSocketClient.java:256)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at com.example.khodor.simplechatneuerversuch.MainActivity.onCreate(MainActivity.java:62)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.Activity.performCreate(Activity.java:5990)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.ActivityThread.access$800(ActivityThread.java:151)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at android.os.Looper.loop(Looper.java:135)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5254)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
07-11 16:23:50.453  10167-10167/programmieren2.simplechat W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

【问题讨论】:

    标签: java android ssl websocket jetty


    【解决方案1】:

    同样的问题。问题似乎在于 Android 中 SSLParameters 的重新实现,您可以在 android.jar 中找到它。这个实现甚至有一个名为“endpointIdentificationAlgorithm”的字段,但没有被使用,所以我想它会在未来实现。

    我通过重写“customize”方法做了一个解决方法——调用缺少的 setEndpointIdentificationAlgorithm 并删除了该行,其余的是原始代码:

       this.client = new WebSocketClient(new SslContextFactory(true){
            @Override
            public void customize(SSLEngine sslEngine) {
                SSLParameters sslParams = sslEngine.getSSLParameters();
                //sslParams.setEndpointIdentificationAlgorithm(_endpointIdentificationAlgorithm);
                sslEngine.setSSLParameters(sslParams);
    
                if (getWantClientAuth())
                    sslEngine.setWantClientAuth(getWantClientAuth());
                if (getNeedClientAuth())
                    sslEngine.setNeedClientAuth(getNeedClientAuth());
    
                sslEngine.setEnabledCipherSuites(selectCipherSuites(
                        sslEngine.getEnabledCipherSuites(),
                        sslEngine.getSupportedCipherSuites()));
    
                sslEngine.setEnabledProtocols(selectProtocols(sslEngine.getEnabledProtocols(),sslEngine.getSupportedProtocols()));
            }
        });
    

    【讨论】:

    • 嘿,我也有同样的问题。想知道这种解决方法是否能正常工作?
    • 该解决方法对我有用,但由于我有其他问题,我现在使用 com.neovisionaries.ws 对我来说很好,无需额外的黑客攻击
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2012-02-09
    • 2016-02-29
    相关资源
    最近更新 更多