特定のwebサーバーと、OpenSSL 1.0.1a 〜 OpenSSL 1.0.1f のバージョンで、TLS1.2 で通信をしようとすると OpenSSLが固まることがあります。
OpenSSL 1.0.1f は、2015年6月現在、Ubuntu 14.04, Ubuntu 15.04 などの apt で最新版で自動的に入るバージョンで、これ以上のバージョンアップは apt ではできません。
そこで、改修された OpenSSL 1.0.1g をインストールする方法です。
OpenSSLのバージョン
$ openssl version OpenSSL 1.0.1f 6 Jan 2014
SSLコネクションの動作確認
$ openssl s_client -connect hoge.example.com:443 # サイト名は仮 →固まる
試しに、TLS1.2を回避して接続
$ openssl s_client -connect home.example.com:443 -no_tls1_2 → コネクションできる
$ wget https://www.openssl.org/source/openssl-1.0.1g.tar.gz $ tar -xzvf openssl-1.0.1g.tar.gz $ cd openssl-1.0.1g $ ./config $ make $ sudo make install_sw $ sudo ln -sf /usr/local/ssl/bin/openssl \`which openssl\`
もしここで、make install としてしまうと、
cms.pod around line 457: Expected text after =item, not a number cms.pod around line 461: Expected text after =item, not a number cms.pod around line 465: Expected text after =item, not a number cms.pod around line 470: Expected text after =item, not a number cms.pod around line 474: Expected text after =item, not a number POD document had syntax errors at /usr/bin/pod2man line 71. make: *** [install_docs] エラー 255
こうなってエラーで落ちます。manページのビルドに失敗しているらしい。 なので、make install_sw とします。manページのビルドを行わないらしい。
$ openssl version OpenSSL 1.0.1g 7 Apr 2014 $ openssl s_client -connect hoge.example.com:443 →コネクションできた!
これで、OpenSSLのバージョンアップはできましたが、これに依存する curl, PHP, Python, その他の更新が必要な場合、それらもビルドしなおしがいるかもしれませんので、けっこう面倒です。
curl, PHP, Python を使ってこのバグを踏んでいる場合、それらのアプリで TLS1.2 での接続を回避させた方が修正が容易かもしれません。
→ http://b.ytyng.com/a-62/ Curl, Python, PHP で HTTPS 接続する際固まるサイトがあるので、TLS1.2 を使わないようにする
How To Upgrade OpenSSL to 1.0.1g To Guard Against Heartbleed in Ubuntu ~ Bauer-Power Media http://www.bauer-power.net/2014/05/how-to-upgrade-openssl-to-101g-to-guard.html#.VXaBpOdCLHM
Linuxbrew でインストールしてもいいかも
Linuxbrew のススメ - Qiita http://qiita.com/thermes/items/926b478ff6e3758ecfea
コメント