Flo*_*aus 5 ruby openssl rbenv
我正在尝试在带有ARMv7处理器的Synology DS215j上安装ruby 2.2.4或2.3.0.我使用optware-ng来安装gcc,make,openssl,openssl-dev和zlib.我根据自述文件中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby-build插件.
这些是使用optware-ng安装的软件包及其版本
binutils - 2.25.1-1
gcc - 5.3.0-6
gconv-modules - 2.21-3
glibc-opt - 2.21-4
libc-dev - 2.21-1
libgmp - 6.0.0a-1
libmpc - 1.0.2-1
libmpfr - 3.1.3-1
libnsl - 2.21-3
libstdc++ - 6.0.21-6
make - 4.1-1
ncurses - 5.7-4
openssl - 1.0.2f-1
openssl-dev - 1.0.2f-1
readline - 6.1-2
ruby - 2.2.0-1
screen - 4.2.1-2
termcap - 1.3.1-3
zlib - 1.2.8-2
Run Code Online (Sandbox Code Playgroud)
当我运行rbenv install 2.2.4或rbenv install 2.3.0在两种情况下,构建失败并显示错误消息"未定义的符号:SSLv2_method".这是2.2.4版本的错误:
installing bundle gems: /var/services/homes/florian/.rbenv/versions/2.2.4/lib/ruby/gems/2.2.0 (build_info, cache, doc, extensions, gems, specifications)
/tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require': /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/.ext/armv7l-linux-eabihf/openssl.so: undefined symbol: SSLv2_method - /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/.ext/armv7l-linux-eabihf/openssl.so (LoadError)
from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/.ext/common/openssl.rb:17:in `<top (required)>'
from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/security.rb:11:in `<top (required)>'
from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/package.rb:43:in `<top (required)>'
from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/dependency_installer.rb:3:in `<top (required)>'
from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems/core_ext/kernel_require.rb:54:in `require'
from /tmp/ruby-build.20160329115213.2672/ruby-2.2.4/lib/rubygems.rb:556:in `install'
from ./tool/rbinstall.rb:722:in `block (2 levels) in <main>'
from ./tool/rbinstall.rb:721:in `each'
from ./tool/rbinstall.rb:721:in `block in <main>'
from ./tool/rbinstall.rb:757:in `call'
from ./tool/rbinstall.rb:757:in `block in <main>'
from ./tool/rbinstall.rb:754:in `each'
from ./tool/rbinstall.rb:754:in `<main>'
uncommon.mk:246: recipe for target 'do-install-all' failed
make: *** [do-install-all] Error 1
Run Code Online (Sandbox Code Playgroud)
这似乎与rubygems中的某些内容有关.
有趣的是,我尝试自己构建ruby的原因是,当我尝试安装gem时,Synology 6提供的ruby版本会返回类似的错误:
florian@synology:~/.rbenv/plugins$ /usr/bin/gem install rails
ERROR: Loading command: install (LoadError)
/usr/lib/ruby/2.3.0/armle-linux-gnu/openssl.so: undefined symbol: SSLv2_method - /usr/lib/ruby/2.3.0/armle-linux-gnu/openssl.so
ERROR: While executing gem ... (NoMethodError)
undefined method `invoke_with_build_args' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
什么可能导致这些问题,我该如何解决它们?
当我在两种情况下运行rbenv install 2.2.4或rbenv install 2.3.0时,构建失败并显示错误消息
"undefined symbol: SSLv2_method"...什么可能导致这些问题......
由于CVE-2016-0800(DROWN Attack),3月份SSLv2设备已从OpenSSL中完全删除.
我认为完全删除有点苛刻,因为你正在经历的影响.应该有警告和过渡期.它应该发生在10年前左右.
我认为SSLv2_method,SSLv2_client_method而不是由于DROWN完全删除,SSLv2_server_method应该设置一个适当的错误代码,ERR_R_REMOVED_INSECURE并返回NULL.<openssl/opensslconf.h>应该无条件地设置OPENSSL_NO_SSL2.
OpenSSL意识到他们破坏了ABI兼容性,并使用Commit 133138569f37d149将符号添加回1.0.2 .在办理入住手续时提供的符号SSLv2_method,SSLv2_client_method并SSLv2_server_method再次,但他们没有设置错误代码返回NULL.他们也没有定义OPENSSL_NO_SSL2.另见[openssl.org#4398] BUG/1.0.2g打破了CURL扩展.
SSLv2已经不安全15或20年了.Ruby之类的软件包不应该引用这些符号.您应该针对Ruby提交安全错误报告以引用该符号.
......我怎么能解决它们?
要解决这个问题,我相信你需要(1)等待OpenSSL 1.0.2h,(2),手动修补OpenSSL 1.0.2g,或者(3)删除所有Ruby引用SSLv2_method,SSLv2_client_method和SSLv2_server_method.
这是你需要的补丁(2),手动补丁OpenSSL 1.0.2g:
diff --git a/ssl/s2_meth.c b/ssl/s2_meth.c
index b312f17..d46e2f5 100644
--- a/ssl/s2_meth.c
+++ b/ssl/s2_meth.c
@@ -74,8 +74,8 @@ IMPLEMENT_ssl2_meth_func(SSLv2_method,
ssl2_accept, ssl2_connect, ssl2_get_method)
#else /* !OPENSSL_NO_SSL2 */
-# if PEDANTIC
-static void *dummy = &dummy;
-# endif
+SSL_METHOD *SSLv2_method(void) { return NULL; }
+SSL_METHOD *SSLv2_client_method(void) { return NULL; }
+SSL_METHOD *SSLv2_server_method(void) { return NULL; }
#endif
Run Code Online (Sandbox Code Playgroud)
您还应该至少使用no-ssl2 no-ssl3 no-comp标志配置和编译OpenSSL,因为它们是已知的安全问题.配置选项定义OPENSSL_NO_SSL2,OPENSSL_NO_SSL3并OPENSSL_NO_COMP在<openssl/opensslconf.h>.
| 归档时间: |
|
| 查看次数: |
1933 次 |
| 最近记录: |