Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在浏览器发送连接请求后,创建代理无法通过SSL正确隧道?_Java_Http_Sockets_Ssl - Fatal编程技术网

Java 在浏览器发送连接请求后,创建代理无法通过SSL正确隧道?

Java 在浏览器发送连接请求后,创建代理无法通过SSL正确隧道?,java,http,sockets,ssl,Java,Http,Sockets,Ssl,一段时间以来,我一直在努力让我的自定义代理在浏览器发送连接请求时正确处理。为了简单起见,让我解释一下我是如何处理这个过程的。也许到时候有人能帮我澄清我做错了什么 使用端口8080上的ServerSocketChannel创建服务器 将该ServerSocketChannel绑定到选择器,该选择器基本上允许在服务器等待来自端口8080的请求时不阻塞 一旦我将浏览器设置为端口8080并发送请求,它就会通知选择器发送到端口8080的内容 我收到该请求并看到它是一个连接,因此我立即创建一个响应“连接已建

一段时间以来,我一直在努力让我的自定义代理在浏览器发送连接请求时正确处理。为了简单起见,让我解释一下我是如何处理这个过程的。也许到时候有人能帮我澄清我做错了什么

  • 使用端口8080上的ServerSocketChannel创建服务器
  • 将该ServerSocketChannel绑定到选择器,该选择器基本上允许在服务器等待来自端口8080的请求时不阻塞
  • 一旦我将浏览器设置为端口8080并发送请求,它就会通知选择器发送到端口8080的内容
  • 我收到该请求并看到它是一个连接,因此我立即创建一个响应“连接已建立”(我发送和接收的请求和响应如下)
  • 来自浏览器的请求:

    连接google.com:443http/1.1 用户代理:Mozilla/5.0(Windows;U;Windows NT 6.1;en-US;rv:1.9.2.18)Gecko/20110614 Firefox/3.6.18 GTB7.1 代理连接:保持活动状态 主持人:google.com

    我通过正常套接字发送回浏览器的响应:

    HTTP/1.1 200已建立连接\r\n氧连接:保持活动\r\n\r\n

  • 现在我等待从浏览器发送一些东西,我假设此时会发送SSL请求,但不会发送任何东西。我开始认为这是因为我没有与浏览器建立SSL握手,所以它不会通过默认创建的套接字发送SSL消息。您认为我需要关闭端口8080上的套接字并在端口8080上建立新的SecureSocket,然后再将建立连接的响应发送回浏览器吗?这是我的下一步。我知道浏览器需要在初始连接后向我发送更多数据。我没有足够的数据来连接服务器。我认为它需要向我发送另一个请求,类似于SSL中的以下内容:
  • 得到/ 主持人:google.com

    一旦我得到了类似的东西,我就可以建立与服务器的安全套接字连接,并获取返回到浏览器的响应

    你认为正确的方向是什么?只是在建立连接后,我没有收到额外的消息

    我收到这个请求并看到它是一个连接,所以我立即创建了一个 响应“已建立连接”

    一开始就错了。在上游建立连接之前,不应发送“已建立连接”。你在骗你的客户

    我开始认为这是因为我还没有建立SSL 与浏览器握手

    无关紧要。一旦您这样做了,您将从客户机获得的下一件事情就是二进制文件。从这一点开始,您应该做的就是复制字节

    你认为我需要关闭8080端口上的插座并建立 端口8080上的新SecureSocket

    没有

    一旦我得到这样的东西,我就可以去建立我的安全 与服务器的套接字连接

    错。一旦您从客户端获得了一些数据,您就应该通过与上游服务器的现有明文连接透明地发送它。您不必亲自参与SSL

    我没有足够的数据来连接服务器

    是的,你知道。当你被告知这样做时,你应该建立上游连接,并在你实际这样做时告诉客户你已经这样做了,而不是之前

    你认为正确的方向是什么

    没有

    只是在建立连接后,我没有收到额外的消息

    这表明你还没有发送任何东西。NIO代码很棘手。write()API的返回代码是什么