目前我的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的证书和密钥,但工作正常。
答案 0 :(得分:0)
有谁知道这怎么可能发生?
根据源代码,SSL_CTX_set_ecdh_auto返回0的唯一情况是编译openssl库时不支持ECDH(OPENSSL_NO_ECDH)或根本不支持椭圆曲线(OPENSSL_NO_EC)。