マソム自宅サーバ構築の記録
- ■
-
OpenSSLを0.9.8bから0.9.8nにアップデート
-
作成日:10/12/20
更新日:11/01/29
前置き
FireFoxのエラーコンソールに以下のメッセージが出ているのに気付きました。
www.mathomfactory.com : server does not support RFC 5746, see CVE-2009-3555
Apacheのサイトに情報が有り、
セキュリティ情報 CVE-2009-3555 への対応について
Apache mod_ssl が使用している TLS/SSL プロトコルに脆弱性がみつかりました。修正のためには、OpenSSL の更新または Apache httpd へのパッチが必要です。
とのことでした。OpenSSL-0.9.8l 以上にしなくてはなりません。
Fedora 7 用のパッケージは有りませんので、以下の方法を検討しました。
1.最新のソースからRPMパッケージを作成する。
2.Fedora の他のバージョンのSRPMソースパッケージから、RPMパッケージを作成する。
結論から述べると、1.の方法は失敗し、2.の方法でアップデートしました。
1.が失敗したのは、シンボリックリンク名を libssl.so.6 と libcrypto.so.6 に変更したパッケージを作ることが出来なかったからです。まだまだ勉強が足りません。
なお、最新版は openssl-1.0.0c でしたが、試して失敗したのは openssl-0.9.8q です。
openssl-1.0.0x にする時は、各種サーバやモジュールの再構築が必要とのことでしたので。
OpenSSLのインストール 4 Xen
参考にしたサイト
1.2.2 fedora 5/6を fc11 のsrc.rpm で OpenSSL のアップデート
ぽちネット-Linux備忘録-Linuxコマンドリファレンス- rpmbuild
第1回:カスタムRPMの基礎とspecファイル
RPMパッケージからファイルを取り出すには
有難うございました。
rpmbuildの準備
RPMパッケージのビルドに使用する、rpmbuildコマンドがインストールされていることを確認をします。
$ yum info rpm-build
fedora 100% |=========================| 2.1 kB 00:00
updates 100% |=========================| 2.3 kB 00:00
Installed Packages
Name : rpm-build
Arch : i386
Version: 4.4.2.2
Release: 2.fc7
Size : 1.5 M
Repo : installed
Summary: パッケージのビルドに使われるスクリプトと実行可能ファイル
Description:
このパッケージには RPM を使用したパッケージのビルドに使われる
スクリプトと実行可能ファイルが含まれています。
自分のホームディレクトリの下に、RPM をビルドするために必要なファイルやディレクトリを作成します。
$ cd
$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
SRPMソースパッケージのインストール
ソース置き場にしているディレクトリに移動して、ソースパッケージをダウンロードします。
$ cd /home/ユーザ名/src
$ wget http://ftp.tsukuba.wide.ad.jp/Linux/fedora-archive/fedora/linux/updates/11/SRPMS/openssl-0.9.8n-2.fc11.src.rpm
--16:48:10-- http://ftp.tsukuba.wide.ad.jp/Linux/fedora-archive/fedora/linux/updates/11/SRPMS/openssl-0.9.8n-2.fc11.src.rpm
=> `openssl-0.9.8n-2.fc11.src.rpm'
ftp.tsukuba.wide.ad.jp をDNSに問いあわせています... 203.178.132.78, 203.178.132.79, 203.178.132.76, ...
ftp.tsukuba.wide.ad.jp|203.178.132.78|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 3,052,974 (2.9M) [application/x-rpm]
100%[====================================>] 3,052,974 1.71M/s
16:48:12 (1.71 MB/s) - `openssl-0.9.8n-2.fc11.src.rpm' を保存しました [3052974/3052974]
インストールします。
$ cd
$ rpm -ivh --nomd5 src/openssl-0.9.8n-2.fc11.src.rpm
警告: openssl-0.9.8n-2.fc11.src.rpm: ヘッダ V3 RSA/SHA256 signature: NOKEY, key ID d22e77f2
1:openssl 警告: ユーザ mockbuild は存在しません - root を使用します
警告: グループ mockbuild は存在しません - root を使用します
警告: ユーザ mockbuild は存在しません - root を使用します
・・・省略・・・
########################################### [100%]
・・・省略・・・
警告: ユーザ mockbuild は存在しません - root を使用します
警告: グループ mockbuild は存在しません - root を使用します
注)オプションの --nomd5 を指定しないと、以下のエラーが出ました。
エラー: アーカイブの伸長に失敗: ファイル /home/ユーザ名/rpmbuild/SOURCES/Makefile.certificate;4d0f0ae2: cpio: MD5 チェックサムが適合しません。
RPMのビルド
インストールしたSPECファイルを編集します。
$ vi rpmbuild/SPECS/openssl.spec
・・・省略・・・
## %define soversion 8
%define soversion 6
・・・省略・・・
## Requires: mktemp, ca-certificates >= 2008-5
Requires: mktemp
・・・省略・・・
パッチファイルも一部編集します。
$ vi rpmbuild/SOURCES/openssl-0.9.8j-soversion.patch
・・・省略・・・
+SHLIB_SONAMEVER=86
・・・省略・・・
ソースを展開し依存するパッケージを確認します。
$ rpmbuild -bp rpmbuild/SPECS/openssl.spec
・・・省略・・・
+ exit 0
ビルドします。
$ rpmbuild -bb rpmbuild/SPECS/openssl.spec
・・・省略・・・
伸張ファイルの検査中: /usr/lib/rpm/check-files /var/tmp/openssl-0.9.8n-root
書き込み完了: /home/ユーザ名/rpmbuild/RPMS/i386/openssl-0.9.8n-2.fc7.i386.rpm
書き込み完了: /home/ユーザ名/rpmbuild/RPMS/i386/openssl-devel-0.9.8n-2.fc7.i386.rpm
書き込み完了: /home/ユーザ名/rpmbuild/RPMS/i386/openssl-static-0.9.8n-2.fc7.i386.rpm
書き込み完了: /home/ユーザ名/rpmbuild/RPMS/i386/openssl-perl-0.9.8n-2.fc7.i386.rpm
書き込み完了: /home/ユーザ名/rpmbuild/RPMS/i386/openssl-debuginfo-0.9.8n-2.fc7.i386.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.32432
+ umask 022
+ cd /home/ユーザ名/rpmbuild/BUILD
+ cd openssl-0.9.8n
+ '[' /var/tmp/openssl-0.9.8n-root '!=' / ']'
+ rm -rf /var/tmp/openssl-0.9.8n-root
+ exit 0
出来上がったRPMファイルのあるディレクトリに移動します。
$ cd rpmbuild/RPMS/i386/
RPMファイルに含まれるファイルを一覧表示して確認します。
$ rpm2cpio openssl-0.9.8n-2.fc7.i386.rpm | cpio --list
./etc/pki/CA
./etc/pki/CA/private
./etc/pki/tls
./etc/pki/tls/certs
./etc/pki/tls/certs/Makefile
./etc/pki/tls/certs/make-dummy-cert
./etc/pki/tls/misc
./etc/pki/tls/misc/CA
./etc/pki/tls/misc/c_hash
./etc/pki/tls/misc/c_info
./etc/pki/tls/misc/c_issuer
./etc/pki/tls/misc/c_name
./etc/pki/tls/openssl.cnf
./etc/pki/tls/private
./usr/bin/openssl
./usr/lib/.libcrypto.so.0.9.8n.hmac
./usr/lib/.libcrypto.so.6.hmac
./usr/lib/.libssl.so.0.9.8n.hmac
./usr/lib/.libssl.so.6.hmac
./usr/lib/libcrypto.so.0.9.8n
./usr/lib/libcrypto.so.6
./usr/lib/libssl.so.0.9.8n
./usr/lib/libssl.so.6
./usr/lib/openssl
./usr/lib/openssl/engines
./usr/lib/openssl/engines/lib4758cca.so
./usr/lib/openssl/engines/libaep.so
./usr/lib/openssl/engines/libatalla.so
./usr/lib/openssl/engines/libcapi.so
./usr/lib/openssl/engines/libchil.so
./usr/lib/openssl/engines/libcswift.so
./usr/lib/openssl/engines/libgmp.so
./usr/lib/openssl/engines/libnuron.so
./usr/lib/openssl/engines/libsureware.so
./usr/lib/openssl/engines/libubsec.so
./usr/share/doc/openssl-0.9.8n
./usr/share/doc/openssl-0.9.8n/CHANGES
./usr/share/doc/openssl-0.9.8n/FAQ
./usr/share/doc/openssl-0.9.8n/INSTALL
./usr/share/doc/openssl-0.9.8n/LICENSE
./usr/share/doc/openssl-0.9.8n/NEWS
./usr/share/doc/openssl-0.9.8n/README
./usr/share/doc/openssl-0.9.8n/c-indentation.el
./usr/share/doc/openssl-0.9.8n/openssl.txt
./usr/share/doc/openssl-0.9.8n/openssl_button.gif
./usr/share/doc/openssl-0.9.8n/openssl_button.html
./usr/share/doc/openssl-0.9.8n/ssleay.txt
./usr/share/man/man1/asn1parse.1ssl.gz
./usr/share/man/man1/ca.1ssl.gz
./usr/share/man/man1/ciphers.1ssl.gz
./usr/share/man/man1/crl.1ssl.gz
./usr/share/man/man1/crl2pkcs7.1ssl.gz
./usr/share/man/man1/dgst.1ssl.gz
./usr/share/man/man1/dhparam.1ssl.gz
./usr/share/man/man1/dsa.1ssl.gz
./usr/share/man/man1/dsaparam.1ssl.gz
./usr/share/man/man1/ec.1ssl.gz
./usr/share/man/man1/ecparam.1ssl.gz
./usr/share/man/man1/enc.1ssl.gz
./usr/share/man/man1/errstr.1ssl.gz
./usr/share/man/man1/gendsa.1ssl.gz
./usr/share/man/man1/genrsa.1ssl.gz
./usr/share/man/man1/md2.1ssl.gz
./usr/share/man/man1/md4.1ssl.gz
./usr/share/man/man1/md5.1ssl.gz
./usr/share/man/man1/mdc2.1ssl.gz
./usr/share/man/man1/nseq.1ssl.gz
./usr/share/man/man1/ocsp.1ssl.gz
./usr/share/man/man1/openssl.1ssl.gz
./usr/share/man/man1/pkcs12.1ssl.gz
./usr/share/man/man1/pkcs7.1ssl.gz
./usr/share/man/man1/pkcs8.1ssl.gz
./usr/share/man/man1/req.1ssl.gz
./usr/share/man/man1/ripemd160.1ssl.gz
./usr/share/man/man1/rsa.1ssl.gz
./usr/share/man/man1/rsautl.1ssl.gz
./usr/share/man/man1/s_client.1ssl.gz
./usr/share/man/man1/s_server.1ssl.gz
./usr/share/man/man1/s_time.1ssl.gz
./usr/share/man/man1/sess_id.1ssl.gz
./usr/share/man/man1/sha.1ssl.gz
./usr/share/man/man1/sha1.1ssl.gz
./usr/share/man/man1/smime.1ssl.gz
./usr/share/man/man1/speed.1ssl.gz
./usr/share/man/man1/spkac.1ssl.gz
./usr/share/man/man1/sslpasswd.1ssl.gz
./usr/share/man/man1/sslrand.1ssl.gz
./usr/share/man/man1/verify.1ssl.gz
./usr/share/man/man1/version.1ssl.gz
./usr/share/man/man1/x509.1ssl.gz
./usr/share/man/man5/config.5ssl.gz
./usr/share/man/man5/x509v3_config.5ssl.gz
./usr/share/man/man7/des_modes.7ssl.gz
6540 blocks
無事に、libcrypto.so.6 と libssl.so.6 になっていました。
RPMのインストール(アップデート)
インストール済みパッケージを確認します。
$ rpm -qa | grep openssl
openssl-0.9.8b-15.fc7
openssl-devel-0.9.8b-15.fc7
作成したパッケージをインストールします。
$ su
# rpm -Uvh openssl-0.9.8n-2.fc7.i386.rpm openssl-devel-0.9.8n-2.fc7.i386.rpm
準備中... ########################################### [100%]
1:openssl ########################################### [ 50%]
2:openssl-devel ########################################### [100%]
アップデートされたことを確認します。
# rpm -qa | grep openssl
openssl-0.9.8n-2.fc7
openssl-devel-0.9.8n-2.fc7
Apacheを再起動します。
# /usr/local/apache2/bin/apachectl restart
なお、PHPは再構築しないと、OpenSSLのアップデートが反映されません。
紆余曲折Tips