此刻我的OpenSSL的版本是OpenSSL:已SSL_CTX_set_ecdh_auto()返回失敗
的OpenSSL 1.0.2h 3 2016
我用的OpenSSL Simple_TLS_Server提供了一個示例代碼來啓動服務器,並使用的s_client.First發送五月握手。像這樣的服務器返回錯誤:
139629255337616:error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher:s3_srvr.c:1349
而且的s_client.First返回:
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)
---
閱讀本Manual:SSL_CTX_set1_curves(3)後,我修改了原來的一些行:
if(!SSL_CTX_set_ecdh_auto(ctx, 1))
{
fprintf(stderr, "Error: SSL_CTX_set_ecdh_auto(ctx, 1)\n");
}
當我重新啓動Simple_TLS_Server,它打印
Error: SSL_CTX_set_ecdh_auto(ctx, 1)
也試過這樣:
if(!SSL_CTX_set_ecdh_auto(ctx, 1))
{
ERR_print_errors_fp(stderr);
}
但沒有可用的錯誤消息。 有誰知道這是怎麼發生的?如果您需要更多信息,請讓我知道。
PS:我嘗試證書和密鑰與s_server和s_client,工作正常。
*「...我的openssl版本是OpenSSL 1.0.2h 2016年5月3日」* - 您確定嗎?對你的服務器運行'ldd',看看哪個版本的OpenSSL是運行時鏈接/加載。如果它*不是*你認爲的那個,那麼(1)用'-Wl,-rpath =/usr/local/ssl/lib'構建你的服務器;或者(2)用'LD_LIBRARY_PATH =/usr/local/ssl/lib'啓動你的服務器。 – jww
@jww,非常感謝。我將服務器鏈接到舊版本的OpenSSL庫。現在我用'gcc -o test test.c -L/usr/local/ssl/lib/-I/usr/local/ssl/include -lssl -lcrypto -ldl'來重建服務器。服務器現在工作正常。 – eloy