【问题标题】:How to determine version of openssl library?如何确定 openssl 库的版本?
【发布时间】:2014-06-12 18:47:36
【问题描述】:

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

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

【问题讨论】:

    标签: c++ openssl


    【解决方案1】:

    库中有一个包含版本详细信息的字符串,名为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(或任何其他 lib)版本是静态链接到二进制文件时,您可以找到它。只需使用二进制文件作为 strings 命令的输入。整洁!
    • cygwin 再次拯救世界!在 DLL 上使用它也很有效。
    【解决方案2】:

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

    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
    

    【讨论】:

      【解决方案3】:

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

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

      • SSLeay()
      • SSLeay_version()

      【讨论】:

      • 非常感谢。你能为此提供一个代码示例吗?我在 iOS 平台上使用它。
      • @Naseef:this 有帮助吗?
      • 是的,它很有帮助。我正在检查它。会让你知道更新。非常感谢。
      • @Naseef:这个例子就是cout << SSLeay_version(SSLEAY_VERSION);。当然,在使用 SSL_library_init (); 初始化库之后。
      • 它已经链接到openssl,为什么还需要任何路径?
      【解决方案4】:

      你也可以使用:

      openssl version -a
      

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

      【讨论】:

      • 只返回 /usr/bin 或任何地方的二进制版本以及编译器标志。它不返回通常位于 /usr/lib 中的库文件的版本
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 2016-11-15
      • 2020-07-23
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多