SSL 端口与 nginx 和 SNI 统一

标签 ssl nginx sni

我的内部网络上有许多独立的 SSL 服务器,我希望通过单个 IP 地址和端口将其公开给公共(public) Internet。我的所有客户端都保证支持 server_name TLS 扩展(又名服务器名称指示或 SNI)。

我想象的是,nginx 将查看传入连接的 TLS 客户端 hello 消息,并找出将连接转发到哪个内部 IP。然后 nginx 充当 TCP 隧道,即 nginx 本身不参与任何 TLS session (即使它会查看传入的 TLS 客户端 hello 消息!),并且不需要自己的 SSL 证书或私钥。

换句话说,TLS session 在客户端上启动,通过 nginx(它使用 TLS 客户端问候中的 server_name 信息对目标进行多路复用)并在目标服务器中终止。

这可以用 nginx 完成吗?如何完成? 如果没有,您是否知道其他可以执行此操作的代理软件?

最诚挚的问候,

最佳答案

haproxy 似乎可以这样做:

use-server srv1 if { req_ssl_sni -i hostname1 }
server     srv1 192.168.0.1:443 weight 0

关于SSL 端口与 nginx 和 SNI 统一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25019611/

相关文章:

java - 无法在 amazon ec2 (centos) tomcat 上配置 https

ios - 在 mac 终端中将 pem 格式的公钥转换为 der 格式时出错

php - curl 中的 ssl 证书

docker nginx ssl 代理传递给另一个容器

django - 错误请求 400 : nginx/gunicorn

java - 使用 Cloudflare 进行 Tomcat/TomEE SSL 配置

nginx - 在入口主机名中使用通配符

apache - 如何使没有证书的 apache SNI 主机重定向到 http 地址?

ssl - 使 lighttpd (lighty) 代理根据服务器名称指示转发 HTTPS 请求,而不返回 SSL 证书

python - SSLV3_ALERT_HANDSHAKE_FAILURE 与 SNI 在 Python 2.9.10 中使用 Tornado 4.2