c++ - 我如何在客户端支持多个版本的 TLS?

标签 c++ ssl openssl ssl-certificate poodle-attack

您好,我想在客户端使用 SSLV23 方法支持多个版本的 TLS。但是我无法连接并收到错误消息:

SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

谁能告诉我如何使用 openssl 支持多个版本的 TLS?

SSLV23 的代码片段(不工作)

cctx = SSL_CTX_new(SSLv23_client_method());
  if(cctx) {
  SSL_CTX_set_options(cctx, SSL_OP_NO_SSLv3);
  }

仅适用于 TLS V1(工作)

cctx = SSL_CTX_new(TLSv1_client_method());

最佳答案

根据您的标签和评论,我假设您只需要 TLS 连接。客户端应仅启动 TLS 连接。如果是这样,您为什么坚持使用 SSLv23_client_method?但以下确实在我的测试中发送了 TLS 1.0 客户端问候:

ctx = SSL_CTX_new(SSLv23_client_method());
SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv3);

要防止 POODLE 攻击,最好的办法是在客户端和服务器上完全禁用 SSL3 支持。在您的情况下,您提到服务器仅支持 TLS。因此不需要向后兼容 SSL3 上的客户端 如果服务器确实使用 SSL3,为防止 POODLE 攻击,客户端和服务器应实现 TLS 回退信号 Cipher Suite Value- https://datatracker.ietf.org/doc/html/draft-ietf-tls-downgrade-scsv-05

在客户端设置 TLS 的示例:

/* Exclude SSLv2 and SSLv3 */
ctx = SSL_CTX_new(TLSv1_client_method());
SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv3);

/* Exclude SSLv2, SSLv3 and TLS 1.0 */

 ctx = SSL_CTX_new(TLSv1_1_client_method());
 SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
 SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv3);
 SSL_CTX_set_options(ctx,SSL_OP_NO_TLSv1);

/* Exclude SSLv2, SSLv3 ,TLS 1.0 and TLS 1.1 */

   ctx = SSL_CTX_new(TLSv1_2_client_method());
   SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2);
   SSL_CTX_set_options(ctx,SSL_OP_NO_SSLv3);
   SSL_CTX_set_options(ctx,SSL_OP_NO_TLSv1);
   SSL_CTX_set_options(ctx,SSL_OP_NO_TLSv1_1);

您还可以对选项进行 OR 运算,并一次性传递给 SSL_CTX_set_options

关于c++ - 我如何在客户端支持多个版本的 TLS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29779526/

相关文章:

c++ - 强制编译器在 C++ 中提供默认构造函数

android - android 是否支持 .jks keystore 类型?

ssl - 如何从多个文件创建可用的证书存储

c++ - MFC/Win32 中的定时器消息

c++ - 处理 boost ublas 稀疏或密集矩阵的 API

c# - .NET 核心 HttpClient - "A security error occurred"HttpRequestException

docker - Gitlab 使用 helm 安装分蘖导致 kubernetes-charts.storage.googleapis.com 不是有效的图表存储库

python - 如何使用python加密文件但可以使用shell解密?

c++ - VisualC++ DLL 中的 OpenSSL

c++ - 如何在 C++ 中对文本文件进行排序