代码之家  ›  专栏  ›  技术社区  ›  kocica

安全SSL连接错误:未知协议|错误的主机名查找

  •  0
  • kocica  · 技术社区  · 6 年前

    https://tools.ietf.org/dailydose/dailydose_atom.xml

    首先,我必须通过OpenSSL连接到远程服务器,如前所述 here


    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

    但是主机名&dns对于不安全的版本很有效,所以有人能帮我解决这个问题吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Remy Lebeau    6 年前

    80是默认的HTTP端口。443是默认的HTTPS端口。

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

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