Can';t使用C+中的OpenSSL连接到主机+; 在使用C++中使用OpenSSL尝试通过HTTPS连接到某些主机(不是全部)时,我得到OpenSSL错误错误:14094410:SSL例程:SSL3ARead字节:SSLv3告警握手失败。我正在使用TLS\u client\u方法SSL方法。但是,如果我使用openssl测试可执行文件,就可以了-openssl s_客户端-连接主机:443-tls1_2。 我的连接代码如下: const SSL_METHOD* method = TLS_client_method(); inet->ssl_ctx = SSL_CTX_new(method); inet->ssl = SSL_new(inet->ssl_ctx); SSL_set_fd(inet->ssl, s); int err = SSL_connect(inet->ssl);

Can';t使用C+中的OpenSSL连接到主机+; 在使用C++中使用OpenSSL尝试通过HTTPS连接到某些主机(不是全部)时,我得到OpenSSL错误错误:14094410:SSL例程:SSL3ARead字节:SSLv3告警握手失败。我正在使用TLS\u client\u方法SSL方法。但是,如果我使用openssl测试可执行文件,就可以了-openssl s_客户端-连接主机:443-tls1_2。 我的连接代码如下: const SSL_METHOD* method = TLS_client_method(); inet->ssl_ctx = SSL_CTX_new(method); inet->ssl = SSL_new(inet->ssl_ctx); SSL_set_fd(inet->ssl, s); int err = SSL_connect(inet->ssl);,c++,ssl,openssl,C++,Ssl,Openssl,为什么??也许我需要一些.pem/.pm文件?我不知道,但我在某处看到了。您的代码在连接到服务器时不使用SNI扩展,即在TLS握手中不包含服务器的主机名。多域站点通常需要SNI,当未提供SNI时,可能会失败或返回一些不相关的证书。对于类似CDN的Cloudflare也是如此,其中不同的域可以通过相同的IP地址访问,但应产生不同的证书 。。。我试图连接到hostiman.ru 例如,hostiman.ru就是这样。使用SNI(由较新的s_客户端默认设置): 如果没有SNI,它看起来是这样的: $

为什么??也许我需要一些.pem/.pm文件?我不知道,但我在某处看到了。

您的代码在连接到服务器时不使用SNI扩展,即在TLS握手中不包含服务器的主机名。多域站点通常需要SNI,当未提供SNI时,可能会失败或返回一些不相关的证书。对于类似CDN的Cloudflare也是如此,其中不同的域可以通过相同的IP地址访问,但应产生不同的证书

。。。我试图连接到hostiman.ru

例如,hostiman.ru就是这样。使用SNI(由较新的
s_客户端默认设置):

如果没有SNI,它看起来是这样的:

$ openssl s_client -connect hostiman.ru:443 -tls1_2 -noservername
CONNECTED(00000005)
140420123775424:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:../ssl/record/rec_layer_s3.c:1528:SSL alert number 40
...
    Cipher    : 0000
在客户端使用中设置SNI,即


您无法连接到哪些主机?如果是握手失败,可能是主机出了问题?@Darklander,我想没有,我试图连接到
hostiman.ru
,我可以使用简单的web浏览器连接到此网站。
$ openssl s_client -connect hostiman.ru:443 -tls1_2 -noservername
CONNECTED(00000005)
140420123775424:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:../ssl/record/rec_layer_s3.c:1528:SSL alert number 40
...
    Cipher    : 0000
inet->ssl = SSL_new(inet->ssl_ctx);
SSL_set_tlsext_host_name(inet->ssl, servername)