gpt4 book ai didi

java - 如何在 Android 客户端和 Java 服务器之间创建安全的 SSL 连接?

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:03 25 4
gpt4 key购买 nike

我正在尝试在我的 android 客户端和 java 服务器之间创建一个安全的 TCP/IP 连接。到目前为止,密码学不是我的强项。我知道我必须使用 Bouncy CaSTLe keystore ,但我被卡住了。

我需要创建一个可用于服务器和客户端的自签名证书。这就是我被困的地方。

         InputStream clientTruststoreIs = getResources().openRawResource(R.raw.bks);
KeyStore trustStore = null;
trustStore = KeyStore.getInstance("BKS");
trustStore.load(clientTruststoreIs, "123456".toCharArray());
InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();

sslSocket = (SSLSocket) sslsocketfactory.createSocket(serverAddr, 2222);
inputStream = sslSocket.getInputStream();
Log.d("TEST", "\n1 input");

它连接正常,它显示了服务器端的连接,但是 inputStream = sslSocket.getInputStream() 行完全锁定/不返回。我不确定我是否正确设置了任何充气城堡,或者服务器是否正确设置。请帮忙,我无能为力....

编辑:我修改了服务器,使其在连接时发送数据,但仍然没有发送数据,我更改了获取输入和输出流的顺序,然后它锁定了我获取输出流的位置:

        sslSocket = (SSLSocket) sslsocketfactory.createSocket(serverAddr, 9999);
outputStream = sslSocket.getOutputStream();
Log.d("test", "--**--- created socket 2.0 outputsreams"); // does not reach here
outputStreamWriter = new OutputStreamWriter(outputStream);
bufferedWriter = new BufferedWriter(outputStreamWriter);
inputStream = sslSocket.getInputStream();
inputStreamReader = new InputStreamReader(inputStream);
bufferedReader = new BufferedReader(inputStreamReader);
...
String line = bufferedReader.readLine(); // where I'd expect it to lock...

所以仍然没有运气,没有超时,没有异常(exception),它只是在那里等待......

最佳答案

我认为你的问题类似于this .相同的工作流程适用于 SSL 套接字连接:

However, the basics are much the same as they are in this program:

Open a socket.

Open an input stream and output stream to the socket.

Read from and write to the stream according to the server's protocol, call flush() on the stream when you are done with a message.

Close the streams.

Close the socket.

所以你应该

  1. 首先通过从客户端写入服务器的 OutputStream 向您的服务器发送请求,完成后刷新
  2. 然后服务器将通过其 InputStream 接收消息,并可以作为返回写入其 OutputStream,完成后再次刷新。
  3. 使用 InputStream 从客户端读取响应,从 1 开始,直到完成。

最后,您应该关闭所有流。

在客户端尝试读取响应之前先刷新并发送请求应该会停止“挂起行为”。


编辑:您确定在服务器上使用了 SSLServerSocketFactory 吗?看起来您正在尝试对客户端 服务器使用 SSLSocketFactory。那是行不通的。我用谷歌搜索了 this tutorial ,这基本上类似于您的代码应该是什么样子。

关于java - 如何在 Android 客户端和 Java 服务器之间创建安全的 SSL 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7219758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com