Вопрос: Подключиться к службе https с помощью только http-клиента


Есть простой клиент командной строки, который будет вызываться примерно так:

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

2
2018-04-13 06:23



Спасибо, но это не сработало. Результат был добавлен в вопрос. - Steve Taylor
Да, Windows. См. Сообщение. Когда я вернусь на свою машину Windows, я опубликую небольшое приложение nodejs, которое я написал для этой цели. - Steve Taylor
Что нужно попробовать? Вы только что добавили тег windows. Спасибо за это. - Steve Taylor
Извините - я имел в виду обновленный ответ. - Paul
Я получаю ощущение, что есть две различные версии stunnel с совершенно разными параметрами. Проверьте выход stunnel в вопросе, который показывает параметры, которые доступны для установки. Нигде не существует -c параметр. Фактически, он говорит, что ищет файл конфигурации, называемый -c потому что я положил -c в командной строке, и он не признал его в качестве опции. - Steve Taylor


Вот сценарий 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





Пол был почти прав, но под Windows вам нужно добавить клиент = да в файл конфигурации с  не является параметром командной строки для stunnel окон.

Следующая конфигурация работает для меня

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

Я закончил использование tstunnel.exe, а не stunnel.exe, поскольку это версия командной строки stunnel в Windows. Вот команда:

tstunnel remote_stunnel.conf

2
2017-12-21 00:45