gpt4 book ai didi

ssleay32.dll 不导出 TLS_method

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:05 25 4
gpt4 key购买 nike

我正在将应用程序中的 OpenSSL 库更新到版本 1.0.2c。

此版本支持 TLS 1.0、TLS 1.1 和 TLS 1.2 以及 SSL 3.0。我想将我的应用程序配置为自动协商可能的最高版本。

我已阅读 https://www.openssl.org/docs/ssl/SSL_CTX_new.html 中提供的文档其中表示 TLS_methodTLS_client_methodTLS_server_method 方法可以执行此操作。

但在 Windows 发行版中(在 https://www.openssl.org/related/binaries.html 中可用)ssleay32.dll 不导出方法 TLS_methodTLS_client_methodTLS_服务器_方法。导出了其他方法,例如 TLSv1_methodTLSv1_1_methodTLSv1_2_method。然而,那些只接受特定版本。

我应该使用什么方法来自动进行版本协商?还是应该在运行时选择版本?

最佳答案

I would like to configure my application to automatic negotiate the highest version possible.

使用 SSL/TLS Client 中的以下代码在 OpenSSL wiki 上:

const SSL_METHOD* method = SSLv23_method();
if(method == NULL) handleFailure();

ctx = SSL_CTX_new(method);
if(ctx == NULL) handleFailure();

/* Cannot fail ??? */
const long flags = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_COMPRESSION;
SSL_CTX_set_options(ctx, flags);

它为您提供“TLS 1.0 及更高版本”。

请注意,下界确实提供了 TLS 1.0 的 TLS 记录层版本。上限是 TLS 1.2 的 TLS 客户端版本。记录层携带加密的有效载荷。 SSLv23_method 为您提供特定格式的 ClientHello(适用于 SSLv3 及更高版本)。

暗示记录层版本的下限是大多数人使用它的方式,而不是标准的编写方式。而 TLS 工作组似乎拒绝以这种方式提供。给出的有效论据是“假设客户端想要使用 TLS 1.0、1.2 和 1.3,而不是 1.1”。我不知道有谁会放弃这样的协议(protocol)版本,所以它对我来说只是一个稻草人。

您可以在 Check Server security protocol using openssl 的其中一个答案中阅读更多相关信息.


相关的,你应该使用这个密码套件列表:

const char* const PREFERRED_CIPHERS = "HIGH:!aNULL:!MD5:!RC4";
res = SSL_set_cipher_list(ssl, PREFERRED_CIPHERS);
if(res != 1) handleFailure();

事实上,RSA key 传输已不再受到安全社区的青睐,因此在使用带有 RSA key 的证书时,以下甚至可能是更好的选择:

"HIGH:!aNULL:!MD5:!RC4:!kRSA";

密码字符串将主要提供现代安全性,并将避免 obsolete cryptography warning .

关于ssleay32.dll 不导出 TLS_method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30894057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com