【发布时间】:2019-01-23 02:42:49
【问题描述】:
OpenSSL 版本:OpenSSL 1.1.0g
开发:lib libssl1.0-dev
语言: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/ 为什么案例 3/ 中的 openssl s_client 使用的是协议 TLSv1.2,而服务器协议是用 method = SSLv23_method() 定义的?
【问题讨论】:
-
抱歉,我没听懂。您是否尝试使用
TLSv1_2_client_method()方法创建服务器实现?这从问题中不清楚。此外,SSLv23_method和相关方法已被弃用;我想他们只是转发到TLSv1_2_method,直到他们被完全删除。
标签: ssl encryption openssl x509certificate