Posted at

Ubuntu 13.10にruby 1.9.2をインストールする時にSSLv2のエラーが出たら

More than 5 years have passed since last update.

http://deadmemes.net/2011/10/28/rvm-install-fails-on-ubuntu-11-10/

rbenv install 1.9.2-p180 すると、rubyのビルド時にエラーが出てしまった。

ossl_ssl.c:110:1: error: ‘SSLv2_method’ undeclared here (not in a function)

ossl_ssl.c:111:1: error: ‘SSLv2_server_method’ undeclared here (not in a function)
ossl_ssl.c:112:1: error: ‘SSLv2_client_method’ undeclared here (not in a function)

どうせaptitude install opensslするんだろ、と思いきや、実は脆弱性のあるSSLv2は最近opensslライブラリから消されてしまっているらしい。

http://ja.wikipedia.org/wiki/Transport_Layer_Security#SSL_2.0

つまり文字通り、undeclaredというエラーでした。

どうせ脆弱性があるならそんなものはいらん、というわけでソースにパッチを当ててしまう。

--- ruby-1.9.2-p180/ext/openssl/ossl_ssl.c  2010-12-23 22:24:00.000000000 -0500

+++ ruby-1.9.2-p180/ext/openssl/ossl_ssl_fixed.c 2011-10-28 11:39:30.265970001 -0400
@@ -107,9 +107,9 @@
OSSL_SSL_METHOD_ENTRY(TLSv1),
OSSL_SSL_METHOD_ENTRY(TLSv1_server),
OSSL_SSL_METHOD_ENTRY(TLSv1_client),
- OSSL_SSL_METHOD_ENTRY(SSLv2),
- OSSL_SSL_METHOD_ENTRY(SSLv2_server),
- OSSL_SSL_METHOD_ENTRY(SSLv2_client),
+ // OSSL_SSL_METHOD_ENTRY(SSLv2),
+ // OSSL_SSL_METHOD_ENTRY(SSLv2_server),
+ // OSSL_SSL_METHOD_ENTRY(SSLv2_client),
OSSL_SSL_METHOD_ENTRY(SSLv3),
OSSL_SSL_METHOD_ENTRY(SSLv3_server),
OSSL_SSL_METHOD_ENTRY(SSLv3_client),

をopenssl.patchなどで保存し、

rbenv install --patch 1.9.2-p180 < ./openssl.patch

とする。

途中、ruby-1.9.2-p180/ext/openssl/ossl_ssl.cの場所を聞かれるが、ruby-buildはダウンロードしたソースファイルを/tmp/ruby-build.(DateTime).(pid)下に置くので、/tmp/ruby-build.hogehoge.brabra/ruby-1.9.2-p180/ext/openssl/ossl_ssl.cとか答えると、パッチが自動的に当たり、ビルドが通る。