使用 http 客户端连接到 https 服务

使用 http 客户端连接到 https 服务

是否有一个简单的命令行客户端可以调用如下内容:

http2https --listen localhost:80 --connect example.com:443

https://example.com然后,这将允许我通过实际连接有效地连接到http://localhost?它需要在 Windows 上运行。

我已尝试过 stunnel,但它似乎不起作用。

更新:

以下是输出stunnel.exe -c -r google.com:443 -d 127.0.0.1:8888

No limit detected for the number of clients
stunnel 4.56 on x86-pc-msvc-1500 platform
Compiled/running with OpenSSL 1.0.1e-fips 11 Feb 2013
Threading:WIN32 Sockets:SELECT,IPv6 SSL:ENGINE,OCSP,FIPS
Reading configuration from file -c
Cannot read configuration

Syntax:
stunnel [ [-install | -uninstall] [-quiet] [<filename>] ] | -help | -version | -sockets
    <filename>  - use specified config file
    -install    - install NT service
    -uninstall  - uninstall NT service
    -quiet      - don't display a message box on success
    -help       - get config file help
    -version    - display version and defaults
    -sockets    - display default socket options

Server is down

答案1

Paul 几乎说对了,但在 Windows 下你需要添加客户端 = 是到配置文件-C不是 Windows stunnel 的命令行参数。

以下配置对我有用

[remote]
client = yes
accept = 8888
connect = google.com:443

我最终使用了 tstunnel.exe 而不是 stunnel.exe,因为这是 Windows 中 stunnel 的命令行版本。命令如下:

tstunnel remote_stunnel.conf

答案2

stunnel 你追求的是什么:

sudo stunnel -c -r google.com:443 -d 127.0.0.1:8888

这将与远程方(在本例中为 Google)建立 SSL 会话,并在本地主机端口 8888 上创建一个监听器。如果您还没有监听器,则可以使用 80。

然后您访问 localhost:8888 您将获得远程站点。

如果您使用的是 Windows,则不支持命令行选项,因此请创建一个stunnel.conf包含以下参数的文件:

[remote]
accept = 8888
connect = google.com:443

然后调用它

stunnel -c stunnel.conf

答案3

这是一个可以完成我想要的操作的 node.js 脚本:

var http = require('http');
var https = require('https');

http.createServer(function (req, resp) {
    var h = req.headers;
    h.host = "www.example.com";
    var req2 = https.request({ host: h.host, port: 443, path: req.url, method: req.method, headers: h }, function (resp2) {
        resp.writeHead(resp2.statusCode, resp2.headers);
        resp2.on('data', function (d) { resp.write(d); });
        resp2.on('end', function () { resp.end(); });
    });
    req.on('data', function (d) { req2.write(d); });
    req.on('end', function () { req2.end(); });
}).listen(9999, "127.0.0.1");
console.log('Server running at http://127.0.0.1:9999/');

主机和本地端口都是硬编码的,但将它们变为命令行参数相当容易。

相关内容