用于SSLv2_method的Ubuntu和未定义的符号

Set*_*jmp 24 ubuntu openssl symbols ubuntu-11.10

Canonical是否在其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"
Run Code Online (Sandbox Code Playgroud)

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

[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的状态?

ind*_*div 26

Ubuntu人员在没有SSLv2支持的情况下构建OpenSSL,因为该协议存在已知的安全问题.因此,SSLv2_method即使您在自己编译库时可以找到它,也无法在库中找到它们.

Ubuntu构建日志是公开可用的.您可以在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] 
Run Code Online (Sandbox Code Playgroud)

请注意,可用性SSLv23_method并不意味着客户端将能够使用SSLv2连接到服务器.OpenSSL文档简要讨论了这种情况:

稍后可以使用SSL_CTX_set_options()或SSL_set_options()函数的SSL_OP_NO_SSLv2,SSL_OP_NO_SSLv3,SSL_OP_NO_TLSv1选项限制可用协议列表.使用这些选项可以选择例如SSLv23_server_method()并且能够与所有可能的客户端协商,但只允许更新的协议,如SSLv3或TLSv1.