【问题标题】:I tried using s_client (openssl) and the javax.net.ssl package to connect to encrypted socket我尝试使用 s_client (openssl) 和 javax.net.ssl 包连接到加密套接字
【发布时间】:2020-02-15 12:36:09
【问题描述】:

我尝试使用 s_client (openssl) 和 javax.net.ssl 包连接到加密套接字。

s_client 可以工作,但可能不适用于非 root 的 android,这就是为什么我尝试了 javax.net.ssl 包但我收到以下错误:

java.net.SocketException: 套接字已关闭或损坏

另外,什么是“NaiveTrustManager()”? (https://github.com/maruohon/JavaIRC)

package SSLSocketClient;
import java.io.*;
import java.net.*;
import javax.net.ssl.*;
public class SSLSocketClient{
public static void main(String[] args) {
SSLSocketFactory f = 
(SSLSocketFactory)SSLSocketFactory.getDefault();
  try {
     SSLSocket s =
       (SSLSocket) f.createSocket("localhost", 6697);

     s.startHandshake();

BufferedReader reader = new BufferedReader (new 
InputStreamReader(s.getInputStream()));

BufferedWriter writer = new BufferedWriter(new 
OutputStreamWriter(s.getOutputStream()));

BufferedReader in = new BufferedReader(
new InputStreamReader(
s.getInputStream()));

String line;

while ((line = in.readLine()) != null) {
System.out.println(line);
}

s.close();


  } catch (IOException e) {
     System.err.println(e.toString());
  }
  }

【问题讨论】:

    标签: sockets ssl openssl


    【解决方案1】:

    我通过接受 Java 中的自签名 SSL 证书解决了这个问题。

    http://howardism.org/Technical/Java/SelfSignedCerts.html

    【讨论】:

    • 这不是“解决”而是以不安全的方式“解决”。如果没有适当的证书验证,您不知道您是与预期的服务器还是中​​间攻击者交谈。如果您仔细查看openssl s_client 的输出,您可能会发现它也未能验证证书,只是在这种情况下它不会断开连接,因为它只是一个测试工具。
    • 您还没有真正解决任何问题,您现在的安全级别大多与纯文本相同,实际上接受连接到任何主机,因此将加密内容发送到未知来源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 2018-03-16
    • 2019-12-27
    相关资源
    最近更新 更多