Stunnel:ssl到ssl

我有一个servlets,只侦听https:// localhost:41952,并检查源主机名(它必须是本地主机)。 我想连接上“listen:1988”,并用stunnel将请求redirect到“localhost:41952”

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

当前configuration:

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

openssl_client日志:

http://pastebin.com/7bg3sf7J

请注意,这个证书不同于localhost:41952。

curltesting:

 $ 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 ? 但是我没有任何证书,除非我在服务https:// localhost:41952的站点上从Firefox导出

我原来的问题:

带有SSL的免费反向代理服务器

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

Stunnel是一个代理,旨在将TLSencryptionfunction添加到现有的客户端和服务器上,而无需对程序代码进行任何更改

此工具不用于创build从SSL到SSL的网关。 你所需要的只是一个简单的TCP转发器,可以用socat来完成:

 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声称在响应,但主机的HTTP请求头有期望值'本地主机”。 由于主机头是从URL中设置的,因此您需要确保请求被转发到远程系统,而浏览器不会尝试单独parsingURL,否则会尝试连接到机器上的服务器浏览器正在运行。 为了把URL的parsing延迟到目标系统,你需要在那里运行一个代理,也就是你试过的Charles Proxy或者一些SOCKS代理。

所以要连接到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 

我无法实现的唯一的事情是修改标题主机到本地主机的所有请求。

从curl它是完美的工作:

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