Защищенное SSL-соединение Ошибка: неизвестный протокол |плохой поиск имени хоста - PullRequest
0 голосов
/ 27 сентября 2018

Я загружаю файл RSS-канала (например, https://tools.ietf.org/dailydose/dailydose_atom.xml) с сервера через HTTP.

Сначала я должен подключиться к удаленному серверу через OpenSSL, как описано здесь .


Незащищенная версия работает просто отлично, и я могу подключиться и получить HTTP-ответ с фидами:

bio = BIO_new_connect("www.tools.ietf.org:80");
if(bio == NULL)
{
    /* Handle the failure */
}

if(BIO_do_connect(bio) <= 0)
{
    /* Handle failed connection */
}

Защищенная версия:

BIO                 * m_bio;
SSL_CTX             * m_ctx;
SSL                 * m_ssl;

SSL_library_init(); 

m_ctx = SSL_CTX_new(SSLv23_client_method());

SSL_load_error_strings();
ERR_load_BIO_strings();
OpenSSL_add_all_algorithms();

SSL_CTX_set_default_verify_paths(m_ctx);

m_bio = BIO_new_ssl_connect(m_ctx);
BIO_get_ssl(m_bio, &m_ssl);
SSL_set_mode(m_ssl, SSL_MODE_AUTO_RETRY);

BIO_set_conn_hostname(m_bio, "www.tools.ietf.org:80");


if (BIO_do_connect(m_bio) <= 0)
{
    printf("Error: %s\n", ERR_reason_error_string(ERR_get_error()));
    throw std::runtime_error("FEEDREADER: Connection failed.");
}

if(SSL_get_verify_result(m_ssl) != X509_V_OK)
{
    throw std::runtime_error("FEEDREADER: Verification failed.");
}

Где do_connect завершается с ошибкой:

Ошибка: неизвестный протокол

при замене www.tools.ietf.org на http(s)://www.tools.ietf.org

появляется другая ошибка:

Ошибка: неправильный поиск имени хоста

Но hostname & dns хорошо работает для незащищенной версии, так что может кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 27 сентября 2018

80 - это порт HTTP по умолчанию.443 - это порт HTTPS по умолчанию.

bio = BIO_new_connect("www.tools.ietf.org:443");

BIO_set_conn_hostname(m_bio, "www.tools.ietf.org:443");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...