鼻高々にHTTP/2対応だぜぇってドヤ顔してたら、いつのまにか青い稲妻が表示されなくなっていた。 いろいろ調べていたら、いつもお世話になっているQiitaさんに答えが。
これはGoogle Chromeを対象として、2016年5月15日からそうなっていたらしい。 青い稲妻はGoogle Chromeの拡張機能で表示しているので、そりゃ影響を受けます罠。
では、本当にこの影響なのか、テストサイトで確認してみよう。
おお、HTTP/2には対応しているが、ALPN非対応とな。 ALPNって何だソレ?ってことで調べてみると、簡単に言うとどんな方式で通信するのかを決定する手順、Application Layer Protocol Negotiation、略してALPNということだ。
そして、これはOpenSSLの1.0.2以降でないと対応しておらず、CentOS等で標準でインストールされるバージョンと異なることが問題だ。 では俺の環境では?
$ openssl version OpenSSL 1.0.1e-fips 11 Feb 2013
マジか・・・古いのか・・・と言う訳で、OpenSSLをバージョンアップすることにしたんだが、これがクッソ面倒臭い作業だということが、調べれば調べるほどに分かってきた。
そもそも、この1.0.1系統のOpenSSLだが、サポートが昨年末で終了していてビビる。 脆弱性の対応もできないってことになるからだ。
- Version 1.1.0 will be supported until 2018-08-31.
- Version 1.0.2 will be supported until 2019-12-31 (LTS).
- Version 1.0.1 is no longer supported.
- Version 1.0.0 is no longer supported.
- Version 0.9.8 is no longer supported.
yumでOpenSSLの1.0.2以降はインストールされないから、少なくともOpenSSLをSourceからビルドする必要がある。
最新のNginXはOpenSSL1.1.0系統の互換性もあるようなので、OpenSSLとNginXを更新すれば良いのかな。 OpenSSLを更新したら、ログイン含めて影響がありそうな悪寒もするものの、自爆、人柱が大好きなオレ。 情報の多い1.0.2系統を使えば良いものを、敢えて1.1.0系統で試してみるYO!!
まずは、OpenSSLの最新版をSourceからビルドする。
$ cd /usr/local/src/ $ sudo wget https://www.openssl.org/source/openssl-1.1.0e.tar.gz $ sudo tar xfvz openssl-1.1.0e.tar.gz $ cd openssl-1.1.0e $ sudo ./config shared zlib $ sudo make $ sudo make install
実行してみるとエラー。 ライブラリにパスが通っていないので、探してパスを通したら無事にオッケーだった。
$ sudo /usr/local/bin/openssl version /usr/local/bin/openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory $ sudo find / -name libssl.so.1.1 /usr/local/lib64/libssl.so.1.1 $ sudo ldconfig /usr/local/lib64 $ sudo /usr/local/bin/openssl version OpenSSL 1.1.0e? 16 Feb 2017
さて、既存のyumでインストールしたopensslコマンドはどこにあるのだろう? 下記のコマンドを実行すると、何行も表示されるけど、この二つが新旧だね。
$ sudo find / -name openssl /usr/bin/openssl ←旧 /usr/local/bin/openssl ←新
さて、強制的に1.1.0を見させてしまう・・・か? とも思ったが、そこまでやるのもアレなのでパスをちゃんと通して試すことに。
$ sudo vim /etc/ld.so.conf include ld.so.conf.d/*.conf /usr/local/lib64 $ sudo ldconfig
そして更に、NginXもSourceからビルドする・・・と思ったけど、こんなに手間がかかった上に、アップデートがあれば毎回手動でアップデートするとか面倒でたまらないし、追従できない可能性が高い。
となると・・・。
サーバのOS入れ替え? マジ? HTTP/2のためだけに、そこまでやる?
んーーーー
やっぱやめた!
$ cd /usr/local/src/openssl-1.1.0e/ $ sudo make uninstall
Ubuntuの最新版なら対応しているらしいので、これはもう少し経ったらやる。 今はそこまでやらなくてもいいや。