Openssl:SSL\u CTX\u set\u ecdh\u auto()返回失败

Openssl:SSL\u CTX\u set\u ecdh\u auto()返回失败,c,openssl,C,Openssl,目前,我的openssl版本是 OpenSSL 1.0.2h 2016年5月3日 我使用openssl提供的示例代码启动服务器,并使用s_客户端发送tls握手。服务器返回如下错误: 139629255337616:error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher:s3_srvr.c:1349 if(!SSL_CTX_set_ecdh_auto(ctx, 1)) { ERR_print_errors_fp

目前,我的openssl版本是

OpenSSL 1.0.2h 2016年5月3日

我使用openssl提供的示例代码启动服务器,并使用s_客户端发送tls握手。服务器返回如下错误:

139629255337616:error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher:s3_srvr.c:1349
if(!SSL_CTX_set_ecdh_auto(ctx, 1))
{
    ERR_print_errors_fp(stderr);
}
s_客户端返回:

CONNECTED(00000003)
140266915485328:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:769:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 307 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1471879558
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
读完这篇文章后,我修改了原文的一些行:

if(!SSL_CTX_set_ecdh_auto(ctx, 1))
{
    fprintf(stderr, "Error: SSL_CTX_set_ecdh_auto(ctx, 1)\n");
}
当我重新启动Simple_TLS_服务器时,它会打印

Error: SSL_CTX_set_ecdh_auto(ctx, 1)
我也试过这样做:

139629255337616:error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher:s3_srvr.c:1349
if(!SSL_CTX_set_ecdh_auto(ctx, 1))
{
    ERR_print_errors_fp(stderr);
}
但没有可用的错误消息。 有人知道这是怎么发生的吗?如果你需要更多的信息,请告诉我

PS:我用s_服务器和s_客户端尝试了证书和密钥,效果很好

有人知道这是怎么发生的吗

根据源代码,SSL_CTX_set_ecdh_自动返回0的唯一情况是编译openssl库时不支持ecdh(openssl_NO_ecdh)或根本不支持椭圆曲线(openssl_NO_EC)

有人知道这是怎么发生的吗


根据源代码,SSL_CTX_set_ecdh_自动返回0的唯一情况是在编译openssl库时不支持ecdh(openssl_NO_ecdh)或根本不支持椭圆曲线(openssl_NO_EC)。

“…我的openssl版本是openssl 1.0.2h,2016年5月3日”-你确定吗?对服务器运行
ldd
,查看它是哪个版本的OpenSSL运行时链接/加载。如果不是您所想的,那么(1)使用
-Wl,-rpath=/usr/local/ssl/lib构建您的服务器;或者(2)使用
LD\u LIBRARY\u PATH=/usr/local/ssl/lib
@jww启动服务器,非常感谢。我将服务器链接到旧版本的OpenSSL库。现在我用gcc-o test.c-L/usr/local/ssl/lib/-i/usr/local/ssl/include-lssl-lcrypto-ldl来重建服务器。服务器现在运行正常。“…我的openssl版本是openssl 1.0.2h,2016年5月3日”-你确定吗?对服务器运行
ldd
,查看它是哪个版本的OpenSSL运行时链接/加载。如果不是您所想的,那么(1)使用
-Wl,-rpath=/usr/local/ssl/lib构建您的服务器;或者(2)使用
LD\u LIBRARY\u PATH=/usr/local/ssl/lib
@jww启动服务器,非常感谢。我将服务器链接到旧版本的OpenSSL库。现在我用gcc-o test.c-L/usr/local/ssl/lib/-i/usr/local/ssl/include-lssl-lcrypto-ldl来重建服务器。服务器现在工作正常。我使用了OpenSSL的默认配置,当时我使用了。/config。我的问题就像上面描述的jww。谢谢。我使用了OpenSSL的默认配置,当时我使用了。/config。我的问题就像上面描述的jww。谢谢