【问题标题】:Java SSLSocket with Socks5 Proxy带有 Socks5 代理的 Java SSLSocket
【发布时间】:2018-07-28 06:58:01
【问题描述】:

如何将 SSLSocket 与 socks5 代理一起使用?我使用带有代理的普通套接字作为底层。

此代码不起作用:

public void debugIP(Proxy proxy) throws IOException, NoSuchAlgorithmException, KeyManagementException {
      SSLContext sslContext = SSLContext.getInstance("SSL");
      sslContext.init(null, null, null);

      Socket underlying = new Socket(proxy);
      InetSocketAddress proxyAddress = (InetSocketAddress) proxy.address();

      underlying.connect(new InetSocketAddress("checkip.amazonaws.com", 80));

      SSLSocket socket = (SSLSocket) sslContext.getSocketFactory().createSocket(
              underlying,
              proxyAddress.getHostName(),
              proxyAddress.getPort(),
              true);

      printInputStream(socket.getInputStream());
  }

  private void printInputStream(InputStream inputStream) throws IOException {
      BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));

      String line;

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

这段代码抛出异常:

线程“main”javax.net.ssl.SSLException 中的异常:无法识别的 SSL 消息,明文连接?

没有 SSL,代码可以工作。

【问题讨论】:

    标签: java sockets ssl socks


    【解决方案1】:

    您正在将 SSL 与纯文本端口通信。

    正如错误消息所说。

    要么修复端口,要么不使用 SSL。

    【讨论】:

    • 如果您确实使用 SSL,请给 createSocket 重载(根据 Javadoc)“逻辑对等目标”的主机名和端口,即目标而不是代理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2014-08-06
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多