如何确定openssl库的版本?

26

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

是否有办法从这些预编译的库中获取版本号?

6个回答

32

库中有一个包含版本详细信息的字符串,名为SSLEAY_VERSION - 它看起来像:

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

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

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

1
是的。它可以使用静态库。这意味着当您知道它与二进制文件静态链接时,您可以找到 OpenSSL(或任何其他库)的版本。只需将二进制文件用作字符串命令的输入即可。很棒! - Marcell
Cygwin 再次拯救了我们!在 DLL 上使用它也非常好用。 - NobleUplift

16

1
非常感谢。你能提供一个代码示例吗?我正在使用iOS平台。 - Naseef Chowdhury
2
@Naseef:这个链接(https://github.com/ppelleti/https-example/blob/master/https-common.c#L39)有帮助吗? - László Papp
@Laszio Papp,请查看我的编辑评论。我刚才忽略了您在评论中提供的链接。我想知道代码中从哪里获取库路径? - Naseef Chowdhury
1
它已经与openssl链接,那么为什么需要任何路径呢? - László Papp
请检查我的答案。 - Naseef Chowdhury
显示剩余9条评论

16

好的,过滤器可能并不总是有效。你可以这样做:

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

11

这只返回在/usr/bin或其他位置的二进制文件的版本,以及编译器标志。它不会返回通常位于/usr/lib目录中的库文件的版本。 - fred

1

我需要一个在没有安装strings的系统上工作的变体,这与https://dev59.com/G2Ag5IYBdhLWcg3wrMh4#26635393有足够的不同之处,因此将其发布为自己的答案似乎是值得的:

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

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

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


1

在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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接