gpt4 book ai didi

c++ - 使用 openssl 检查服务器安全协议(protocol)

转载 作者:太空狗 更新时间:2023-10-29 20:58:36 32 4
gpt4 key购买 nike

我有一个框架应用程序,它根据使用方式连接到不同的服务器。对于 https 连接,使用 openssl。我的问题是,我需要知道我连接的服务器是使用 SSL 还是 TLS,这样我才能创建正确的 SSL 上下文。目前,如果我使用错误的上下文尝试建立连接会超时。

对于我使用的 TLS:

SSL_CTX *sslContext = SSL_CTX_new(TLSv1_client_method());

对于 SSL,我使用:

SSL_CTX *sslContext = SSL_CTX_new(SSLv23_client_method());

那么有没有办法在建立连接之前知道服务器运行的是哪种协议(protocol)呢?

编辑:据我所知,它现在应该以任何一种方式工作,因为 SSLv23_client_method() 也包含 TLS 协议(protocol)。所以问题是为什么不呢?一种客户端方法超时而不是另一种客户端方法超时的原因可能是什么?

最佳答案

For SSL I use:
SSL_CTX *sslContext = SSL_CTX_new(SSLv23_client_method());

TLS 只是以前 SSL 协议(protocol)的当前名称,即 TLS1.0 实际上是 SSL3.1 等。SSLv23_client_method 实际上是建立 SSL/TLS 连接的最兼容方式,将使用可用的最佳协议(protocol)。这意味着如果服务器支持,它还将创建 TLS1.2 连接。另见 documentation of SSL_CTX_new :

SSLv23_method(void), SSLv23_server_method(void), SSLv23_client_method(void)

A TLS/SSL connection established with these methods may understand the SSLv2, SSLv3, TLSv1, TLSv1.1 and TLSv1.2 protocols.

... a client will send out TLSv1 client hello messages including extensions and will indicate that it also understands TLSv1.1, TLSv1.2 and permits a fallback to SSLv3. A server will support SSLv3, TLSv1, TLSv1.1 and TLSv1.2 protocols. This is the best choice when compatibility is a concern.

您可以使用 SSL_OP_NO_SSLv3 等并使用 SSL_CTX_set_options 禁用任何您不想要的协议(protocol)(例如 SSL3.0)。

Currently if I use the wrong context trying to establish a connection times out.

然后服务器或您的代码被破坏。如果服务器与它不理解的协议(protocol)建立连接,它应该返回“未知协议(protocol)”警报。其他服务器只是关闭连接。超时通常只会发生在损坏的服务器或中间件上,例如旧的 F5 Big IP load balancer .

关于c++ - 使用 openssl 检查服务器安全协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27278166/

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