【问题标题】:How to Receive SSL Socket Data in Java?如何在 Java 中接收 SSL 套接字数据?
【发布时间】:2019-02-20 08:16:46
【问题描述】:

所以我刚刚阅读了this 的帖子,它说你需要像这样制作一个 SSL 套接字:

SocketFactory factory = SSLSocketFactory.getDefault();
Socket socket = factory.createSocket("computerName", 2282);

所以我认为这行不通,因为它看起来太简单了,但实际上并没有引发错误。它确实连接到了我的服务器,该服务器目前只是使用普通的套接字连接,但它从来没有显示它从它接收到数据,只是它连接了。以下是每个代码:

客户

SocketFactory factory = SSLSocketFactory.getDefault();
Socket socket = factory.createSocket("computerName", 2282);
DataOutputStream outputData = new DataOutputStream(socket.getOutputStream());
outputData.writeUTF("1"));
DataInputStream inputData = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
String returnData = inputData.readUTF();

服务器:

Socket socket = server.accept();
DataInputStream inputData = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
DataOutputStream outputData = new DataOutputStream(socket.getOutputStream());
String incomingData = inputData.readUTF();
System.out.println("Received: " + incomingData);
String[] receivedDataArray = incomingData.split("\\s+");
// "1" occurs when the client pings the server.
if (receivedDataArray[0].equals("1"))
    outputData.writeUTF("1");

知道为什么会这样,我该如何解决?

【问题讨论】:

  • 也许刷新 outputData?

标签: java sockets ssl


【解决方案1】:

它不会起作用。由于您没有使用 SSLServerSocketFactory 创建服务器套接字。在建立安全连接之前,您应该首先设置几项内容,例如 CIpherSuite TLS 版本等。

为了设置安全参数,你需要创建SSLContext,然后创建一个服务器套接字

 SSLContext sc = SSLContext.getInstance("TLSv1.3");
    sc.init(null, trustAllCerts, new SecureRandom());
    SSLServerSocket ssl = (SSLServerSocket) sc.getServerSocketFactory().createServerSocket(
            YOURPORTNUMBER);

还有一点,你的 IdentityStore 和 trustStore 应该配置正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-12
    • 2013-06-18
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    相关资源
    最近更新 更多