Ubuntu 和 SSLv2_method 的 undefined symbol

标签 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"

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

[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 人员在不支持 SSLv2 的情况下构建 OpenSSL,因为该协议(protocol)具有 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 :

The list of protocols available can later be limited using the SSL_OP_NO_SSLv2, SSL_OP_NO_SSLv3, SSL_OP_NO_TLSv1 options of the SSL_CTX_set_options() or SSL_set_options() functions. Using these options it is possible to choose e.g. SSLv23_server_method() and be able to negotiate with all possible clients, but to only allow newer protocols like SSLv3 or TLSv1.

关于Ubuntu 和 SSLv2_method 的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8206546/

相关文章:

ruby - 为什么 double splat 仅适用于符号键?

java - 需要帮助理解 Java 中的符号 "->"

Android 模拟器无法在 ubuntu 中启动

linux - 我怎样才能删除字符串并使用它前面的数字

c++ - OpenSSL fatal error LNK1120 : 3 unresolved externals

encryption - openssl RSA_public_encrypt() 返回的大小总是 = RSA_size(rsa)?

linux - 编写多个 sed 命令的更简洁的方法?

php - 如何在 Ubuntu 16.04 上设置 Docker + PhpStorm + xdebug

java - 在 Java 中读取 OpenSSL 生成的 PEM/DER 格式的 S/MIME 消息

css - 某些 SVG 符号在浏览器中不可见