如何确定openssl库的版本

How to determine version of openssl library?

本文关键字:版本 openssl 何确定      更新时间:2023-10-16

我有一个预构建的OpenSSL库(libssl.a和libcrypto.a),用于我的C++应用程序。我不知道OpenSSL库的版本。

有没有办法从这些预先构建的库中获取版本号?

库中有一个字符串,包含名为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]+"

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

  • OPENSSL_VERSION_NUMBER(3)

  • SSLeay_version(3)

基本上,您需要使用以下功能:

  • SSLeay()
  • SSLeay_version()

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

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

您也可以使用:

openssl version -a

参见参考资料:https://linux.die.net/man/1/version

我需要https://stackoverflow.com/a/26635393/597742这将在没有安装CCD_ 7的系统上工作。它的不同之处在于,它似乎值得作为自己的答案发布:

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

--text允许直接检查二进制文件,-o通过只打印匹配的文本来解决缺少行分隔符的问题。

这个答案和基于strings的答案都值得注意的一点是:除了检查libssllibcrypto的OpenSSL版本很有用之外,它们还可以检查静态链接二进制文件中的OpenSSL版。

在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