TCP / IP套接字无法与TLSv1_2_client_method()

时间:2019-01-23 02:42:49

标签: ssl encryption openssl x509certificate

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?

1 个答案:

答案 0 :(得分:0)

使用EC密码要求选择一条曲线(例如,通过调用SSL_CTX_set_ecdh_auto(ctx,1);)。我错过了这个电话。

@Maarten Bodewes:是的,我想使用TLSv1_2_method,但是它们失败了。 SSL方法有效(而未使用EC密码)。通过TLSv1_2_method以上的解决方案,可以使用EC密码。