Linux/OpenSSLのインストール

OpenSSLのソースコードからのビルド(2016-11-21、追記:2017-10-02)


※昔の話題です。当時の情報としてご覧ください。


Openssl は、すぐに脆弱性が出るので*1、パッケージでは無くソースからビルドしたいのです。
以下は 1.1.0c でビルドした際のメモです。



注意:各パッケージの対応状況について

バージョン 1.1.0 に上げる前に、必ず、
OpenSSLのライブラリを利用する、パッケージ側の最新の対応状況を確認しましょう。
気になる方は後半を先に読んで下さい。

ファイルのダウンロード

ファイルは https://www.openssl.org/source/ で落とせます。

# cd /usr/local/src/
# wget https://www.openssl.org/source/openssl-1.1.0c.tar.gz

ファイルの検証例として同サイトにあるSHA256 ファイルと比較する場合は以下。
もちろん sha1 でも pgp でも検証可。

# sha256sum openssl-1.1.0c.tar.gz

ファイルのビルド、インストール

そのまま既存の上書きでいけるのか分からないので、一応パッケージは削除しました。
(混在させざるをえない方は、ご参考まで「ソースからのビルドとyum install の混在について」)

# yum list | grep openssl
# yum remove openssl

さらに、NOTES.PERLテキストとINSTALLテキストにあるように、
(makeは問題ないですが)make testで全滅しました。先に perl-core が必要です。

# yum install perl-core

特に問題なければ、インストール。やり方はINSTALLテキストを参照。

# tar zxvf openssl-1.1.0c.tar.gz
# cd openssl-1.1.0c/
# ./config
# make
# make test
(上手くいかなかった場合、TESTSで絞って、VERBOSEで詳細を見る。
  例:make VERBOSE=1 TESTS=test_rehash test)
# make install

で、インストールは成功し、以下のように起動失敗。

# openssl version
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
# find / -name libssl.so.1.1
/usr/local/lib64/libssl.so.1.1

エラーの原因になっている「libssl.so.1.1」は確かに存在しているのですが、
まだこの環境では /usr/local/lib64 のPATHが通ってなかったので、追加する。*2

# vi /etc/ld.so.conf
(/usr/local/lib64 を追記)
# ldconfig -v
# openssl version
OpenSSL 1.1.0c  10 Nov 2016

ふ~。無事バージョンアップ。
(・・・ただし、以下、パッケージと互換が取れない場合あり)

openssl-1.1.0 と apache-httpd

httpd-2.4.26以降で対応しています。
古いバージョンだと未対応なので、気を付けましょう。
(私の場合は apahce 2.4.23 だったので、openssl 1.0.1と組み合わせました)

openssl-1.1.0 と dovecot-2.2.26.0

Dovecot の conf.d/10-ssl.conf について。
ssl_protocols デフォルト値が 「!SSLv2」 なのだが、openssl は SSLv2 に対応していないため*3、何も設定しないとエラーになる。
対応としては ssl_protocols=!SSLv3 などに変更し、"SSLv2" という文言を使わないようにする。

openssl-1.1.0 と opendkim-2.10.3

OpenDKIM で ./configure が通らない。以下のエラー

checking for openssl/ssl.h... yes
checking for library containing SSL_library_init... no
configure: error: Cannot build shared opendkim

これは、ssl.h で SSL_library_init は1.1.0 からお亡くなりになったからです。

# nm -o /usr/local/lib64/libssl.so | grep SSL_library_init
(たぶん、存在しない。詳細は openssl/ssl.h の中をを参照)

SSL_library_init 自体を使っているというよりは、1.1.0に未対応っぽいです。

openssl-1.1.0 と squid-3.5.24

同じく、 ./configure で以下のエラーになります。

checking for SSL_library_init in -lssl... no
configure: error: library 'ssl' is required for OpenSSL

うぅ、バージョン 1.1.0 入れるのは早かったか?*4

どうしても 1.1.0 が必要な場合は、
各パッケージの最新版・アルファ版ならあるいは対応されているかもしれないので、
いずれにせよ、バージョンアップ前に各パッケージの対応状況を確認することをお勧めします。


*1 別にOpensslが悪いわけではないです。みんなが使うパッケージはやたらと狙われるので、脆弱性が発見されやすいんです。
*2 本当は /etc/ld.so.conf.d/ 配下に新しい confファイルを追加するのがベターなんですが、/usr/local/lib は他でも使いそうなので ld.so.conf直書きしました。
*3 対応終了と言った方がいいのかもしれません。既にSSLv2、 v3ともに安全ではないので。
*4 パッケージは現状ほとんど未対応ですが、例えば 1.1.0 からスレッドセーフ用の関数が増えたりしています(CRYPTO_THREAD_run_onceなど)ので、新たに実装する場合は 1.1.0なら便利なのかもしれません。