使用 tech.gusavila92.websocketclient.WebSocketClient 时出现证书错误

Posted

技术标签:

【中文标题】使用 tech.gusavila92.websocketclient.WebSocketClient 时出现证书错误【英文标题】:Certificate error when using tech.gusavila92.websocketclient.WebSocketClient 【发布时间】:2021-03-27 06:05:43 【问题描述】:

我正在创建一个 android 应用程序,我想将它连接到运行安全 websockets (wss) 的服务器。我的连接代码如下:

private void createWebSocketClient() 
    URI uri;

    try 
        // Connect to local host
        uri = new URI("wss://mysocketsdomain:8080/ws");
    

    catch (URISyntaxException e) 
        Log.d("Connection", "I am not even connecting");
        e.printStackTrace();
        return;
    

    webSocketClient = new WebSocketClient(uri) 
        @Override
        public void onOpen() 
            Log.i("WebSocket", "Session is starting");
            webSocketClient.send("Hello World!");
        

        @Override
        public void onTextReceived(String s) 
            Log.i("WebSocket", "Message received");
            final String message = s;
            runOnUiThread(new Runnable() 
                @Override
                public void run() 
                    try
                        //TextView textView = findViewById(R.id.mainText);
                        //textView.setText(message);
                     catch (Exception e)
                        e.printStackTrace();
                    
                
            );
        

        @Override
        public void onBinaryReceived(byte[] data) 
        

        @Override
        public void onPingReceived(byte[] data) 
        


        @Override
        public void onPongReceived(byte[] data) 
        
        @Override
        public void onException(Exception e) 
            System.out.println(e.getMessage());
        
        @Override
        public void onCloseReceived() 
            Log.i("WebSocket", "Closed ");
            System.out.println("onCloseReceived");
        
    ;
    webSocketClient.setConnectTimeout(10000);
    webSocketClient.setReadTimeout(60000);
    webSocketClient.enableAutomaticReconnection(5000);
    webSocketClient.connect();

我收到以下错误:

java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

如果我从浏览器访问 Web 前端,连接工作正常,我可以从挂锁符号看到证书有效。此外,我在 javascript 中使用 Svelte 开发的前端 Web 应用程序运行良好。

谁能告诉我需要做什么?我在网上阅读了很多令人困惑的信息。有些事情表明我需要在 Android 应用程序中创建一个受信任的证书存储。我看到的另一件事表明这是服务器证书链的问题。我将服务器设置为使用包含链的证书文件,但错误仍然发生。当它适用于 JavaScript 应用程序和 Web 前端时,我不确定它是否是服务器。

【问题讨论】:

【参考方案1】:

尝试升级 WeSocketClient 库:

    implementation 'tech.gusavila92:java-android-websocket-client:1.2.0'

【讨论】:

抱歉,我不记得九个月前我做了什么来解决这个问题。

以上是关于使用 tech.gusavila92.websocketclient.WebSocketClient 时出现证书错误的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份