OpenSSL版本:OpenSSL 1.1.0g
开发:lib libssl1.0-Dev
Lang:C++
我有一个客户端/服务器TCP套接字应用程序(C++,Linux)。我已经生成了一个自签名证书,客户端和服务器都使用相同的证书文件(客户端和服务器在同一个盒子上运行)。
要创建证书,我运行以下命令:
openssl genrsa-des3-out服务器.key 2048
openssl x509-req-days 365-in-server.csr-signkey server.key-out server.crt
1/当我实现SSL_CTX*CTX=SSL_CTX_new(SSLv23_method())时使用密码列表时,连接正常,数据可以传输:"ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH">
2/当我使用代码时:SSL_CTX*CTX=SSL_CTX_new(TLSv1_2_client_method())连接未建立,我得到SSL_ERROR_SSL。
如果我将密码列表更改为"DHE-RSA-AES256-GCM-SHA384",它应该可以与TLS一起使用,那也无济于事。我也犯了同样的错误。
3/当我运行:openssl s_client-connect x.x.x:yy时,当服务器运行带有SSLv23_method()的版本时,我得到以下结果:
新增,TLSv1.2,密码为AES256-GCM-SHA384
服务器公钥为2048位
安全的重新协商IS支持
压缩:无
扩展:无
无ALPN协商
SSL会话:
Protocol : TLSv1.2
Cipher : AES256-GCM-SHA384
我的问题是:
A/I希望能够使用方法=TLSv1_2_client_method()。我需要用不同的命令参数生成证书吗?
B/为什么情况3/中的openssl s_client使用协议TLSv1.2,而服务器协议是用方法=SSLv23_method()定义的?
使用EC密码需要选择一条曲线(例如,通过调用SSL_CTX_set_ecdh_auto(CTX,1);)。我错过了这个电话。
@Maarten Bodewes:是的,我想使用TLSv1_2_方法,但他们失败了。SSL方法正在工作(但未使用EC密码)。使用上述解决方案,TLSv1_2_方法可用于EC密码。