Openssl:SSL_CTX_set_ecdh_auto()返回失败

时间:2016-08-22 15:55:04

标签: c openssl

目前我的openssl版本是

OpenSSL 1.0.2h 2016年5月3日

我使用openssl Simple_TLS_Server提供的示例代码来启动服务器并使用s_client发送tls握手。服务器返回错误,如下所示:

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)
---

s_client返回:

if(!SSL_CTX_set_ecdh_auto(ctx, 1))
{
    fprintf(stderr, "Error: SSL_CTX_set_ecdh_auto(ctx, 1)\n");
}

阅读此Manual:SSL_CTX_set1_curves(3)后,我修改了原文的一些行:

Error: SSL_CTX_set_ecdh_auto(ctx, 1)

当我重新启动Simple_TLS_Server时,它会打印

if(!SSL_CTX_set_ecdh_auto(ctx, 1))
{
    ERR_print_errors_fp(stderr);
}

也尝试过这样:

paid

但是没有可用的错误消息。 有谁知道这怎么可能发生?如果您需要更多信息,请告诉我。

PS:我尝试使用s_server和s_client的证书和密钥,但工作正常。

1 个答案:

答案 0 :(得分:0)

  

有谁知道这怎么可能发生?

根据源代码,SSL_CTX_set_ecdh_auto返回0的唯一情况是编译openssl库时不支持ECDH(OPENSSL_NO_ECDH)或根本不支持椭圆曲线(OPENSSL_NO_EC)。