【问题标题】:How to handle POST/GET with an https URL in proxy?如何在代理中使用 https URL 处理 POST/GET?
【发布时间】:2021-12-20 23:33:17
【问题描述】:

我写了一个运行良好的代理服务器。但是在查看日志时,有一些奇怪的请求,例如:

POST https://vortex.data.microsoft.com/collect/v1 HTTP/1.1

还有一些GET通过https。我认为只有CONNECT 被允许通过https,我错了吗?如果我错了,如何处理这些请求? (我刚刚在我的应用中删除了这些请求。)

另一件事可能不相关,所有这些请求都与日志中的microsoft 相关。

【问题讨论】:

  • 一般来说,在代理中处理 HTTPS 应该没有问题,但请提供更多信息以便更好地理解您的问题
  • 例如获取 HTTPS 时,代理应该连接到 80 端口还是 443 端口?为什么 GET/POST 不仅仅在 CONNECT 后面通过代理透明。

标签: http https proxy http-proxy https-proxy-agent


【解决方案1】:

在代理中使用 HTTPS 处理任何 HTTP 方法 没有任何问题。

如果没有特别说明,所有带有https://-protocol 的请求都会被自动接收并发送到端口443

独立地,如果您有一个部署了HAProxyNGINXApache Web Server 的服务器,或者您确实编写了一个类似this one in JavaScript 的代理,那么您唯一需要做的就是从字面上将请求代理到目标服务器地址。


关于加密,正是 HTTPS 确保客户端和实际目标之间没有窃听者,因此代理将充当初始目标,然后这将透明地拦截连接。

  1. 客户端启动到代理的 HTTPS 会话
  2. 代理拦截并返回其证书,该证书由客户端信任的 CA 签名。
  3. 代理启动到目标的 HTTPS 会话
  4. Target 返回其证书,该证书由代理信任的 CA 签名。
  5. 代理传输内容、解密并使用其证书重新加密。

基本上它是两个 HTTPS 会话的串联,一个在客户端和代理之间,另一个在代理和最终目的地之间。

【讨论】:

  • 是否有任何关于此的标准/RFC,或者它只是一个事实上的标准?
  • 关于端口?您有关于默认端口号的RFC-2818 Section 2.3。关于方法,在同一个 RFC 的第 2 节中;它说应该以与 HTTP 相同的方式使用 HTTPS。
  • 另外,在RFC-7230 Section 2.7.2 中,当他们谈论https:// 方案时,他们提到端口443 是HTTPS 的默认端口。
  • 你的意思是代理只是做与HTTP相同的除了443端口。但是谁负责 HTTPS 加密呢?如果代理向远程服务器发送请求POST https://example.com/path.info 没有加密,path.info 将不是隐私。
  • 代理将加密发送到远程服务器,因为它将在代理和目标之间启动一个新的 HTTPS 会话。检查我更新的答案。
猜你喜欢
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 2017-05-03
相关资源
最近更新 更多