サイトアイコン ナカヤン.jp

HTTP/2対応してたのに非対応になってたのはALPNのせいだとわかったけど何もしないことにした

鼻高々にHTTP/2対応だぜぇってドヤ顔してたら、いつのまにか青い稲妻が表示されなくなっていた。 いろいろ調べていたら、いつもお世話になっているQiitaさんに答えが。

EC2+nginxでhttp2対応できたとおもったらできてなかった話。(解決します)

これはGoogle Chromeを対象として、2016年5月15日からそうなっていたらしい。 青い稲妻はGoogle Chromeの拡張機能で表示しているので、そりゃ影響を受けます罠。

Chrome、SPDYのサポートを5月15日に終了

では、本当にこの影響なのか、テストサイトで確認してみよう。

HTTP/2 Test Verify HTTP/2.0 Support

おお、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の最新版なら対応しているらしいので、これはもう少し経ったらやる。 今はそこまでやらなくてもいいや。

 

モバイルバージョンを終了