c++ 如何判断openssl库的版本?

r1zhe5dt  于 2023-03-14  发布在  其他
关注(0)|答案(6)|浏览(232)

我有一个预建的OpenSSL库(libssl. a和libcrypto. a),用于我的C++应用程序。我不知道OpenSSL库的版本。
有没有办法从这些预构建的库中获取版本号?

falq053o

falq053o1#

库中有一个字符串包含版本详细信息,名为SSLEAY_VERSION,如下所示:

  • OpenSSL 0.9.5a 1 Apr 2000
  • OpenSSL 1.0.1e-fips 11 Feb 2013

您可以使用字符串和grep从二进制库中找到它:

strings libcrypto.so | grep "^OpenSSL \S\+ [0-9]\+ \S\+ [0-9]\+"
gt0wga4j

gt0wga4j2#

您可以通过阅读以下内容以编程方式执行此操作:

以及

基本上,您将需要使用以下函数:

  • SSLeay()
  • SSLeay_version()
mfpqipee

mfpqipee3#

过滤可能不总是有效。你可以

strings libssl.so | grep "^OpenSSL"
OpenSSLDie
OpenSSL 1.0.2n  7 Dec 2017

strings libcrypto.so | grep "^OpenSSL"
OpenSSLDie
OpenSSL_add_all_ciphers
OpenSSL_add_all_digests
OpenSSL 1.0.2n  7 Dec 2017
OpenSSL HMAC method
OpenSSL EC algorithm
OpenSSL RSA method
OpenSSL DSA method
OpenSSL ECDSA method
OpenSSL DH Method
OpenSSL X9.42 DH method
OpenSSL PKCS#3 DH method
OpenSSL ECDH method
OpenSSL 'dlfcn' shared library method
OpenSSL default
OpenSSL default user interface
OpenSSL CMAC method
umuewwlo

umuewwlo4#

您还可以用途:

openssl version -a

参见参考文献:https://linux.die.net/man/1/version

u0sqgete

u0sqgete5#

我需要一个https://stackoverflow.com/a/26635393/597742的变体,它可以在没有安装strings的系统上工作。它有足够的不同,似乎值得发布它自己的答案:

grep --text -o 'OpenSSL [[:digit:]][^ ]*' /file/to/check

--text允许直接检查二进制,-o通过只打印匹配的文本来解决行分隔符的缺失。
此答案和基于strings的答案都需要注意的一点是:除了用于检查libssllibcrypto的OpenSSL版本外,它们还用于检查静态链接二进制文件中的OpenSSL版本。

iecba09b

iecba09b6#

在Debian上,你可以问软件包管理员:

# apt list -a openssl 
Listing... Done
openssl/stable-security,now 1.1.1n-0+deb11u4 amd64 [installed,automatic]
openssl/stable 1.1.1n-0+deb11u3 amd64

在RedHat linux上,询问其软件包管理器:

$ dnf list --all openssl
Last metadata expiration check: 0:01:53 ago on Mon 13 Mar 2023 01:14:50 PM UTC.
Installed Packages
openssl.x86_64                                       1:1.1.1k-6.el8_5                                        @Common

相关问题