【问题标题】:TCP/IP socket cannot establish a secure connection with TLSv1_2_client_method()TCP/IP 套接字无法与 TLSv1_2_client_method() 建立安全连接
【发布时间】: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


【解决方案1】:

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

@Maarten Bodewes:是的,我想使用 TLSv1_2_method,但他们失败了。 SSL 方法有效(但不使用 EC 密码)。通过上面的解决方案,TLSv1_2_method 正在使用 EC 密码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2021-05-10
    • 1970-01-01
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多