savostin
@savostin
Еще один программист

OpenSSL client через проски. Есть пример?

Облазил уже "весь Интернет"™ - хоть убей не могу найти пример https клиента на "чистом" lib OpenSSL на c(++) через http(s?) прокси.
Как я понимаю сначала идет connect на сам прокси (без SSL?), затем ему отсылается "CONNECT realhost.com:443" и уже на него с SSL. Так? Есть ли http прокси, которые умеют шифровать трафик до них? Или это не нужно?
Потому как:
> curl https://ipinfo.io/ -v -x http://54.37.130.2:3128
<показывает ip>
> curl https://ipinfo.io/ -v -x https://54.37.130.2:3128
* OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection

Схематически у меня так:
SSL_library_init();
OPENSSL_init_ssl(0, NULL);
OpenSSL_add_all_algorithms();
SSL_load_error_strings();
ERR_load_crypto_strings();
ERR_load_BIO_strings();
SSL_CTX* ctx = SSL_CTX_new(SSLv23_method());
SSL_CTX_set_options(ctx, SSL_OP_ALL);

SSL* ssl;
BIO* bio = BIO_new_ssl_connect(ctx);
BIO_get_ssl(bio, &ssl);
SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
BIO_set_conn_hostname(bio, proxy_ip);
BIO_set_conn_port(bio, proxy_port);
SSL_set_tlsext_host_name(ssl, (void*)proxy_ip)); // надо ли?
BIO_do_connect(bio); // <--------------- error 0 ибо прокси, как я понимаю, ждёт plain, а не ssl
char buffer = "CONNECT realhost.com:443 HTTP/1.1\r\nProxy-Connection: Keep-Alive\r\n\r\n");
BIO_write(bio, buffer, strlen(buffer));
// <--------- что дальше?

Если вместо proxy_ip поставить "realhost.com", а вместо proxy_port "443", то всё работает (т.е. напрямую без прокси).
  • Вопрос задан
  • 285 просмотров
Пригласить эксперта
Ответы на вопрос 1
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Очевидно, потому что по айпишнику сертификат невалидный.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы