OpenSSL版本:OpenSSL 1.1.0g
开发:lib libssl1.0-dev
Lang:C ++
我有一个客户端/服务器TCP套接字应用程序(C ++,Linux)。我已经生成了一个自签名证书,并且客户端和服务器都使用相同的证书文件(客户端和服务器在同一盒子上运行)。
要创建证书,请运行以下命令:
openssl genrsa -des3 -out server.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.x:yy,当服务器使用SSLv23_method()运行该版本时,我得到以下信息:
... 新的TLSv1.2,密码是AES256-GCM-SHA384
服务器公钥为2048位
支持安全重新协商
压缩:无
扩展:无
未协商ALPN
SSL会话:
Protocol : TLSv1.2
Cipher : AES256-GCM-SHA384
...
我的问题是:
A /我希望能够使用方法= TLSv1_2_client_method()。我需要生成具有不同命令参数的证书吗?
B /当使用方法= SSLv23_method()定义服务器协议时,为什么在情况3 /中的openssl s_client使用协议TLSv1.2?
答案 0 :(得分:0)
使用EC密码要求选择一条曲线(例如,通过调用SSL_CTX_set_ecdh_auto(ctx,1);)。我错过了这个电话。
@Maarten Bodewes:是的,我想使用TLSv1_2_method,但是它们失败了。 SSL方法有效(而未使用EC密码)。通过TLSv1_2_method以上的解决方案,可以使用EC密码。