Caddy反向代理服务器在尝试中继TLS客户端hello时警告内部错误



我尝试让Caddy反向代理服务器在客户端和反向服务器之间中继TLS握手,但在代理刚收到TLS客户端hello时失败。Caddy v2.6.2Curl v7.87.0在下面进行测试。

/etc/主机:

127.0.0.1 localhost back-server.local proxy-server.local

Caddyfile-back-server:

{ http_port 2015 }
back-server.local:2016
respond "Hello, world!"

Caddyfile-proxy-server:

{ http_port 2017 }
proxy-server.local:2018 {
reverse_proxy https://back-server.local:2016 {
header_up Host {upstream_hostport}
}
}

初步测试如下:

$ caddy start --config Caddyfile-back-server
$ caddy start --config Caddyfile-proxy-server
$ curl https://back-server.local:2016
Hello, world!
$ curl https://proxy-server.local:2018
Hello, world!

下一个测试中继TLS客户端hello失败。

$ curl --connect-to back-server.local:2016:proxy-server.local:2018 https://back-server.local:2016
curl: (35) ... internal error

从捕获的报文中可以看出,sni: back-server.local是从TLS客户端hello发送到proxy-server的。local:2018,但是代理返回TLS服务器警报:内部错误,然后立即关闭连接。proxy-server之间没有任何通信。Localandback-server.local:2016.

可能有什么问题,如何使它工作?

Caddy服务器作为反向代理不使用SNI从TLS客户端hello进行相关的TLS传递后端服务器,这是TLS正向代理的工作。Caddy L4插件用于L4路由,包括基于TLS sni的路由

下面成功地解决了这个问题,另一个反向代理FRP也能够作为TLS正向代理

/etc/主机

127.0.0.1 localhost back-server.local proxy-server.local

Caddyfile-back-server

{ http_port 2015 }
back-server.local:2016
respond "Hello, world!"

frps.ini

[common]
vhost_https_port = 2018

frpc.ini

[common]
[TLS passthrough]
type = https
local_port = 2016
custom_domains = back-server.local

然后测试通过预期。为了简单起见,所有的配置文件都放在PWD目录下。

$ caddy start --config Caddyfile-back-server
$ frps
$ frpc
$ curl --connect-to back-server.local:2016:proxy-server.local:2018 https://back-server.local:2016
Hello, world!

相关内容

  • 没有找到相关文章

最新更新