【问题标题】:Ubuntu and undefined symbol for SSLv2_methodUbuntu 和 SSLv2_method 的未定义符号
【发布时间】:2012-01-02 15:23:12
【问题描述】:

规范重命名符号是否在其软件包版本的 openssl 中,如果是这样,出于什么目的?当我从头开始编译 openssl-1.0.0e.tar.gz(直接从 openssl.org 下载)时,我看到了必要的符号,但 Python(和我)似乎无法在打包版本中找到它。

继续阅读以了解有关我如何诊断此问题的更多信息...

我正在尝试在 Ubuntu 11.10 上编译 Python 2.6.1,并收到上面的错误消息。我使用这个较旧的 Python 的原因是我试图让我的 Ubuntu 安装 100% 与用于开发目的的生产系统兼容。

表演时

strace -feopen make -j4 |& grep "libssl"

我看到我正在使用一个有前途的文件:

[pid 22614] open("/usr/lib/x86_64-linux-gnu//libssl.so", O_RDONLY) = 7

运行 nm,此文件没有符号。但是 .a 文件确实有一个类似的文件:

0000000000000030 T SSLv23_method

软件包 libssl1.0.0-dbg 是通过 synaptic 安装的,但是当我列出该软件包的已安装文件时,我看到的只是“已安装文件的列表仅适用于已安装的软件包”,这显然是一个 Ubuntu 错误。所以我不确定我应该如何检查.so中存在哪些符号。

但是,我怀疑他们无论如何都将 SSLv2_method 重命名为 SSLv23_method。

如何继续找出 Ubuntu 的 openssl-1.0.0 的状态?

【问题讨论】:

标签: ubuntu openssl symbols ubuntu-11.10


【解决方案1】:

我的解决方法是在不支持 ssl2 的情况下安装 openssl

./config --prefix=/usr enable-shared -no-ssl2

然后安装任何链接到 /usr/ssl 中的库的东​​西。它有效..

【讨论】:

    【解决方案2】:

    借助this blog post 中的补丁,我能够在 Ubuntu 12.04 上构建支持 SSL 的 Python 2.6。

    【讨论】:

      【解决方案3】:

      Ubuntu 人员构建 OpenSSL 时不支持 SSLv2,因为该协议有 known security issues。所以这就是为什么你在他们的库中找不到SSLv2_method,即使你自己编译库时可以找到它。

      Ubuntu 构建日志公开available。您可以在 oneiric-i386.openssl_1.0.0e 日志中看到该库配置了 -no-ssl2 选项,该选项禁用了对 SSLv2 的支持。

      ./Configure --prefix=/usr --openssldir=/usr/lib/ssl --libdir=lib/i386-linux-gnu no-idea no-mdc2 no-rc5 zlib  enable-tlsext no-ssl2 debian-i386
      Configuring for debian-i386
          no-gmp          [default]  OPENSSL_NO_GMP (skip dir)
          no-idea         [option]   OPENSSL_NO_IDEA (skip dir)
          no-jpake        [experimental] OPENSSL_NO_JPAKE (skip dir)
          no-krb5         [krb5-flavor not specified] OPENSSL_NO_KRB5
          no-md2          [default]  OPENSSL_NO_MD2 (skip dir)
          no-mdc2         [option]   OPENSSL_NO_MDC2 (skip dir)
          no-rc5          [option]   OPENSSL_NO_RC5 (skip dir)
          no-rfc3779      [default]  OPENSSL_NO_RFC3779 (skip dir)
          no-shared       [default] 
          no-ssl2         [option]   OPENSSL_NO_SSL2 (skip dir)
          no-store        [experimental] OPENSSL_NO_STORE (skip dir)
          no-zlib-dynamic [default] 
      

      请注意,SSLv23_method 的可用性并不意味着客户端将能够使用 SSLv2 连接到服务器。 OpenSSL 文档简述discusses this situation:

      可用的协议列表稍后可以使用 SSL_OP_NO_SSLv2、SSL_OP_NO_SSLv3、SSL_OP_NO_TLSv1 选项 SSL_CTX_set_options() 或 SSL_set_options() 函数。 使用这些 选项可以选择,例如SSLv23_server_method() 并成为 能够与所有可能的客户进行谈判,但只允许较新的客户 SSLv3 或 TLSv1 等协议。

      【讨论】:

      • 那是当场!感谢您回答如此集中的问题!
      • @kirill_igum: ...你注意到 Carl Meyer 给出的另一个答案了吗?
      • @indiv 它看起来更像是一个黑客。我期待从官方 ppas 安装一些其他库。但我想这是最好的。
      • @kirill_igum:哦,我明白了。好吧,您总是可以自己编译包含 SSLv2 的 OpenSSL 并将其安装在您的机器上。下载 OpenSSL 源代码,./configuresudo make install。我没有亲自尝试过,但想不出由此引起的任何问题(除了重新启用具有已知安全问题的已弃用算法)。
      • 我相信M2Crypto 的最新版本(甚至之前的几个版本)应该可以很好地处理 SSLv2 缺失的支持。
      猜你喜欢
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多