題 使用僅限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

2
2018-04-13 06:07


起源




答案:


stunnel   你在追求什麼:

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

這將設置到遠程方的SSL會話(在本例中為Google),並在localhost端口8888上創建一個偵聽器。如果您還沒有偵聽器,則可以使用80。

然後你訪問localhost:8888,你將獲得遠程站點。

如果您使用的是Windows,則不支持命令行選項,因此請創建一個文件 stunnel.conf 使用以下參數:

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

然後用它來調用它

stunnel -c stunnel.conf

3
2018-04-13 06:23



謝謝,但它沒有用。輸出已添加到問題中。 - Steve Taylor
是的,Windows。看帖子。當我回到我的Windows機器上時,我將發布一個我為此目的編寫的小nodejs應用程序。 - Steve Taylor
有什麼可嘗試的?你剛剛添加了windows標籤。無論如何,謝謝你。 - Steve Taylor
對不起 - 我的意思是更新的答案。 - Paul
我感覺有兩種截然不同的stunnel版本,參數完全不同。在問題中檢查stunnel的輸出,該問題顯示可以設置的參數。 a無處可去 -c 參數。事實上,它說它正在尋找一個名為的配置文件 -c 因為我把 -c 命令行上的選項,它不會將其識別為選項。 - Steve Taylor


保羅幾乎是正確的,但在Windows下你需要添加 客戶=是 到配置文件,因為 -C 不是Windows stunnel的命令行參數。

以下配置適合我

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

我最終使用tstunnel.exe而不是stunnel.exe,因為這是Windows中stnnel的命令行版本。這是命令:

tstunnel remote_stunnel.conf

3
2017-12-21 00:45





這是一個執行我想要的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/');

主機和本地端口都是硬編碼的,但它們很容易使它們成為命令行參數。


2
2018-04-18 07:03