Stunnel:ssl 到 ssl

Stunnel:ssl 到 ssl

我有一个小服务,只监听https://本地主机:41952并检查源主机名(必须是 localhost)。我想连接到“listen:1988”,并使用 stunnel 将请求重定向到“localhost:41952”

https://192.168.1.10:1988 -> redirect https://localhost:41952

当前配置:

[myservice]
cert = stunnel.pem
accept = 0.0.0.0:1988
connect = localhost:41952

openssl_client 日志:

http://pastebin.com/7bg3sf7J

请注意,此证书与 localhost:41952 上的证书不同。

卷曲测试:

$ curl https://192.168.1.17:1988/DYMO/DLS/Printing/Check -vk
*   Trying 192.168.1.17...
* Connected to 192.168.1.17 (192.168.1.17) port 1988 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
* Server certificate: localhost
> GET /DYMO/DLS/Printing/Check HTTP/1.1
> Host: 192.168.1.17:1988
> User-Agent: curl/7.43.0
> Accept: */*
> 

永远等待。

也许我需要client = yes?但我没有任何证书,除非我从服务站点上的 Firefox 导出https://本地主机:41952

我原来的问题:

适用于 Windows 的免费 SSL 反向代理

答案1

stunnel 是一个在非 SSL 和 SSL 之间创建网关的程序。从主页上的描述

Stunnel 是一种代理,旨在向现有客户端和服务器添加 TLS 加密功能,而无需对程序代码进行任何更改

此工具并非设计用于创建从 SSL 到 SSL 的网关。您需要的只是一个简单的 TCP 转发器,可以使用索卡特

socat TCP4-LISTEN:1988,fork TCP4:127.0.0.1:41952

使用此转发器,与 192.168.1.17:1988 的连接将转发至 127.0.0.1:41952。客户端将从服务器获取原始证书,因为转发是在 TCP 级别完成的。服务器将看到来自 127.0.0.1 的连接。

编辑:经过大量沟通,现在很清楚,目的不是在问题中声明正确的源主机名,也不是在响应中声明正确的 Referer,而是 Host HTTP 请求标头具有预期值“localhost”。由于主机标头是从 URL 设置的,因此您需要确保请求被转发到远程系统,并且浏览器不会尝试自行解析 URL,否则它会尝试连接到运行浏览器的计算机上的服务器。要将 URL 的解析推迟到目标系统,您需要在那里运行代理,即您尝试过的 Charles Proxy 或某些 SOCKS 代理。

答案2

因此要连接到https://192.168.1.10:1988并到达在 IP 为 192.168.1.10 的主机上监听环回接口 4952 端口的 SSL 服务:

我们需要 2 个 stunnel 节来实现我们的目标。

[myservice]
cert = stunnel.pem
client = no
accept = 0.0.0.0:1988
connect = localhost:1987

[myserviceaux]
cert = stunnel.pem
client = yes
accept = localhost:1987
connect = localhost:4952

我唯一无法实现的是将 Stunnel 中所有请求的标头主机修改为本地主机。

从 curl 来看,它运行完美:

$ curl https://192.168.1.10:41951/DYMO/DLS/Printing/Check -k -H "Host: localhost"

答案3

我已经解决了类似的HTTPS-TO-HTTPS问题视窗使用以下命令:

netsh interface portproxy add v4tov4 listenport=443 listenaddress=127.0.0.1 connectport=[remote-https-port] connectaddress=[remote-ip]

相关内容