如何在 Android 上创建 SSLSocket 以在同一 WiFi 连接上的设备之间发送数据?

问题描述

标题是我的问题。每当我尝试在使用 SSLSocketFactory 时用 SSLSocket 替换所有 Socket 实例时,Android(我使用的是 API 级别 23)都会给我一个错误。我相信握手失败是因为 Android 需要在 SSLSocket 中实现一定的安全级别才能使其工作。但是,我不知道如何做到这一切。这是我第一次处理 SSLSockets 和加密,但我知道我想要一个基于 RSA 的 SSLSocket 和客户端授权。我被困在涉及创建我自己的公钥和私钥的部分,并且有一些关于 CA 证书和密钥库的东西 - 我不明白我将如何实现这一点,如果它在设备之间,我什至需要 CA 证书吗?一样的WiFi?我没有将任何东西连接到网络。

我附上了我之前在服务器端和客户端上尝试的重新创建,用于创建带有 Android 错误的 SSLSocket。澄清和示例代码将不胜感激。谢谢。

    @Override
    public int onStartCommand(Intent intent,int flags,int startId) {
        new Thread() {
            public void run() {
                try {
                    //server side
                    int port = 8000;
                    SSLServerSocketFactory sslServerSocketFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
                    serverSocket = (SSLServerSocket) sslServerSocketFactory.createServerSocket(port);
                    serverSocket.setEnabledProtocols(new String[]{"TLSv1.2"});

                    while (serverSocket != null && !serverSocket.isClosed()) {
                        SSLSocket socket = (SSLSocket) serverSocket.accept();

                        //socket.setKeepAlive(true);
                    }
                } catch (IOException e) {
                    e.printstacktrace();
                }
            }
        }.start();

        return START_STICKY;
    }

    //client side - would be on a different device in a real use case
    public void clientConnect() {
        int port = 8000;
        SSLSocketFactory f = (SSLSocketFactory) SSLSocketFactory.getDefault();
        socket = f.createSocket("192.168.1.175",port);
    }

尝试在 Android 上已建立的连接之间发送数据时遇到的错误是:

2021-01-25 21:24:07.423 9003-9388/com.harout.smssync W/System.err: javax.net.ssl.SSLHandshakeException: Read error: ssl=0x75b6f94808: Failure in SSL library,usually a protocol error
2021-01-25 21:24:07.423 9003-9388/com.harout.smssync W/System.err: error:100000b8:SSL routines:OPENSSL_internal:NO_SHARED_CIPHER (external/boringssl/src/ssl/handshake_server.cc:705 0x760bfc205a:0x00000000)
2021-01-25 21:24:07.423 9003-9388/com.harout.smssync W/System.err:     at com.android.org.conscrypt.SSLUtils.toSSLHandshakeException(SSLUtils.java:362)
2021-01-25 21:24:07.423 9003-9388/com.harout.smssync W/System.err:     at com.android.org.conscrypt.ConscryptEngine.convertException(ConscryptEngine.java:1134)
2021-01-25 21:24:07.423 9003-9388/com.harout.smssync W/System.err:     at com.android.org.conscrypt.ConscryptEngine.unwrap(ConscryptEngine.java:919)
2021-01-25 21:24:07.423 9003-9388/com.harout.smssync W/System.err:     at com.android.org.conscrypt.ConscryptEngine.unwrap(ConscryptEngine.java:747)
2021-01-25 21:24:07.423 9003-9388/com.harout.smssync W/System.err:     at com.android.org.conscrypt.ConscryptEngine.unwrap(ConscryptEngine.java:712)
2021-01-25 21:24:07.423 9003-9388/com.harout.smssync W/System.err:     at com.android.org.conscrypt.ConscryptEnginesocket$SSLInputStream.processDataFromSocket(ConscryptEnginesocket.java:849)
2021-01-25 21:24:07.423 9003-9388/com.harout.smssync W/System.err:     at com.android.org.conscrypt.ConscryptEnginesocket$SSLInputStream.access$100(ConscryptEnginesocket.java:722)
2021-01-25 21:24:07.423 9003-9388/com.harout.smssync W/System.err:     at com.android.org.conscrypt.ConscryptEnginesocket.doHandshake(ConscryptEnginesocket.java:238)
2021-01-25 21:24:07.423 9003-9388/com.harout.smssync W/System.err:     at com.android.org.conscrypt.ConscryptEnginesocket.startHandshake(ConscryptEnginesocket.java:217)
2021-01-25 21:24:07.423 9003-9388/com.harout.smssync W/System.err:     at com.android.org.conscrypt.ConscryptEnginesocket.waitForHandshake(ConscryptEnginesocket.java:563)
2021-01-25 21:24:07.424 9003-9388/com.harout.smssync W/System.err:     at com.android.org.conscrypt.ConscryptEnginesocket.getoutputStream(ConscryptEnginesocket.java:298)
2021-01-25 21:24:07.424 9003-9388/com.harout.smssync W/System.err:     at com.harout.smssync.SharedResources.send(SharedResources.java:46)
2021-01-25 21:24:07.424 9003-9388/com.harout.smssync W/System.err:     at com.harout.smssync.MainActivity$2$1.run(MainActivity.java:81)
2021-01-25 21:24:07.424 9003-9388/com.harout.smssync W/System.err: Caused by: javax.net.ssl.SSLProtocolException: Read error: ssl=0x75b6f94808: Failure in SSL library,usually a protocol error
2021-01-25 21:24:07.424 9003-9388/com.harout.smssync W/System.err: error:100000b8:SSL routines:OPENSSL_internal:NO_SHARED_CIPHER (external/boringssl/src/ssl/handshake_server.cc:705 0x760bfc205a:0x00000000)
2021-01-25 21:24:07.424 9003-9388/com.harout.smssync W/System.err:     at com.android.org.conscrypt.NativeCrypto.ENGINE_SSL_read_direct(Native Method)
2021-01-25 21:24:07.424 9003-9388/com.harout.smssync W/System.err:     at com.android.org.conscrypt.NativeSsl.readDirectByteBuffer(NativeSsl.java:568)
2021-01-25 21:24:07.424 9003-9388/com.harout.smssync W/System.err:     at com.android.org.conscrypt.ConscryptEngine.readplaintextDataDirect(ConscryptEngine.java:1095)
2021-01-25 21:24:07.424 9003-9388/com.harout.smssync W/System.err:     at com.android.org.conscrypt.ConscryptEngine.readplaintextData(ConscryptEngine.java:1079)
2021-01-25 21:24:07.424 9003-9388/com.harout.smssync W/System.err:     at com.android.org.conscrypt.ConscryptEngine.unwrap(ConscryptEngine.java:876)
2021-01-25 21:24:07.424 9003-9388/com.harout.smssync W/System.err:  ... 10 more

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)