gpt4 book ai didi

ruby - 构建 Ruby 并指定 OpenSSL 目录

转载 作者:太空宇宙 更新时间:2023-11-03 16:46:08 26 4
gpt4 key购买 nike

我使用的是不再维护的旧版本的 ubuntu 10.04。我使用的支付系统最近更新了它的 SST/TLS 证书,现在需要 openssl > 1.0.0

我已经下载了最新版本并使用以下命令从头开始构建它:

CFLAGS=-fPIC ./config shared
CFLAGS='$CFLAGS -fPIC -Wl -Bsymbolic' CXXFLAGS='$CXXFLAGS -fPIC -Wl -Bsymbolic' make
make test
make install

运行 make install 后,它已将所有文件放在 /usr/local/ssl 下。然后,我向 /etc/environment 添加了新路径,以使操作系统在系统版本之前找到新版本的 openssl。

我已经安装了 rbenv 和 ruby​​-build 插件,用于从头开始构建 ruby​​,指向新编译的 openssl 库。但是 ruby​​ 不会使用指定的版本,而是使用系统的版本。运行 ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION' 报告我仍在使用 0.9.8k 版本。编译ruby使用的命令如下:

CFLAGS="$CFLAGS -fPIC" RUBY_CONFIGURE_OPTS="--with-openssl-dir=/usr/local/ssl" rbenv install ree-1.8.7-2012.02

我查看了编译器日志,似乎 ruby​​-build 正在使用指定的 ssl 路径。

我也尝试过升级操作系统,但这并没有帮助,因为 10.04 和 12.04 差异很大,而且我在配置文件中有很多冲突。

所以问题是我如何编译 openssl 和 ruby​​,以便 ruby​​ 在编译期间使用指定的 openssl 二进制文件和 header ?

最佳答案

So the question is how can I compile openssl and ruby so that ruby uses the specified openssl binaries and headers during its compilation?

所以,我的第一 react 是迁移到 Ubuntu 14.04。 Ubuntu 14.04 是 LTS,它提供了最新的 OpenSSL。我会跳过 Ubuntu 12.04。除非……


从平台升级开始,首先使用 RPATH 构建 OpenSSL。那是因为 OpenSSL 只为 BSD 而不是 Linux 启用它们。没有它们,libssl 将使用系统在 /usr/lib 中的 libcrypto,而不是您在 /usr/local 中提供的/ssl/lib.

要使用 RPATH 构建 OpenSSL,请参阅 Build OpenSSL with RPATH?在 Stack Overflow 或 Compilation and Installation | Using RPATHs在 OpenSSL wiki 上。

使用 RPATH 构建 OpenSSL 后,您必须对 Ruby 执行相同的操作。导出适当的 CFLAGSLDFLAGS,然后:

./configure --with-openssl-dir=/usr/local/ssl --prefix=/usr/local
make
sudo make install

我厌倦了所有这些愚蠢的 RPATH/DLL hell 游戏(是的,即使是 Linux 也受苦)。我经常这样做是为了完全避免它:

$ cd ruby
$ egrep -IR "(\-lssl|\-lcrypto)" * | cut -d ":" -f 1 | uniq | sort

从那里,您将获得链接到 OpenSSL 的文件列表。该列表可能是 configure.acconfigureMakefile

然后使用sed切入静态归档来删除动态链接部分:

$ sed -i 's|-lssl|/usr/local/ssl/lib/libssl.a|g' configure.ac configure Makefile
$ sed -i 's|-lcrypto|/usr/local/ssl/lib/libcrypto.a|g' configure.ac configure Makefile

然后,所有那些愚蠢的 RPATH 问题都消失了。唯一剩下的就是确保您使用的是正确的 header 。为此,在执行 grep/sed 技巧之后:

$ export CFLAGS="-I/usr/local/ssl/include -I/usr/local/ssl/include/openssl"
$ ./configure --with-openssl-dir=/usr/local/ssl --prefix=/usr/local
$ make
$ sudo make install

安装后,您甚至不会拥有外部 OpenSSL 依赖项。


现在,综上所述,我只是 downloaded Ruby 2.2.3 ,并且有 no INSTALL 告诉我们如何配置和构建库。此外,似乎没有使用 OpenSSL 的配置选项:

ruby-2.2.3$ ./configure --help | grep -i ssl
ruby-2.2.3$ ./configure --help | grep -i tls

grep 为他们将要使用的库找到了 0 个命中:

ruby-2.2.3$ grep -IR "\-lssl" *
ruby-2.2.3$ grep -IR "\-lcrypto" *

所以,我不确定该怎么做。

我很久以前就基本上放弃了 Ruby,因为做与设置安全通道相关的最简单的事情实在是太难了,比如禁用 SSLv3、禁用压缩和启用 SNI。参见,例如,How to set TLS context options in Ruby (like OpenSSL::SSL::SSL_OP_NO_SSLv2)并使用 Server Name Indication使用 TLS 1.0 及更高版本运行时。

关于ruby - 构建 Ruby 并指定 OpenSSL 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32885960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com