如何知道我的同伴使用的 OpenSSL 版本?

问题描述 投票:0回答:1

我有一个 C 应用程序。 我想根据他们使用的 openssl 版本来区分我的发件人和我的接收者。 我有一个使用 openssl 1.0.2,另一个使用 openssl 3.0.5。 无论如何我可以知道我的同伴正在使用的 openssl 的版本吗???

SSL 结构的 client_version 变量为它们提供相同的值。

从我的评论中添加这个。

所以,实际上我的旧代码有一些问题(我没有写)。它在执行 SSL_shutdown 之前执行 SSL_free 和 SSL_CTX_free。现在,这在旧版本的 OpenSSL 1.0.2 中工作正常。但是,一旦我将我的应用程序迁移到 3.0.5,我必须执行 SSL_shutdown 才能使通信正常工作。现在,因为我正在执行 SSL_shutdown,所以我无法使用 1.0.2 ssl 与发件人通信。所以,我想知道发件人的 ssl 版本,然后为我的接收者执行 SSL_shutdown,以便与使用任何版本的 SSL 的发件人正常工作。 “我不能修改我的旧代码。”

c security ssl openssl
1个回答
3
投票

我同时拥有发送者和接收者。我知道他们使用 OpenSSL。我想为我的应用程序的新版本实现向后兼容性,它将使用 OpenSSL 3.0.

检测对等 TLS 库的版本并不是应该如何实现 TLS 层的向后兼容性。相反,您的服务器应该期望支持特定的 TLS 协议版本和密码。

OpenSSL 1.0.2 最高支持 TLS 1.2——OpenSSL 3.0 也支持(也支持 TLS 1.3)。 OpenSSL 1.0.2 和 OpenSSL 3.0 之间支持的密码也有很多重叠 - 请参阅 here for 1.0.2here for 3.0。请注意,实际支持的密码和协议版本也取决于应用程序及其配置,但如果您同时控制两者,则应该可以进行匹配。

(来自评论)所以,实际上我的旧代码有一些问题(我没有写)。 ...所以,我想知道发件人的 ssl 版本,然后为我的接收者执行 SSL_shutdown,以便使用任何版本的 SSL 与发件人正常工作。

基于此,您的实际要求不是获取 TLS 库的确切版本,而只是区分使用 OpenSSL 1.0.2 的客户端和使用 OpenSSL 3.0 的客户端,并且仅在 TLS 握手完成后。此要求比实际检测 TLS 版本简单得多:使用正确配置的 OpenSSL 3.0 客户端,您应该能够获得 TLS 1.3,而使用 OpenSSL 1.0.2,您只能获得 TLS 1.2。可以通过调用 SSL_get_version 来获取已建立的 TLS 会话的 TLS 版本。

© www.soinside.com 2019 - 2024. All rights reserved.