これは究極のツラミ..
CentOS5でapacheのSNIを対応させるためには以下のような条件があります。
・Apacheが2.2.12以降
・OpenSSLが0.9.8f以降でTLS拡張オプションを指定(configure enable-tlsext shared)
・Apacheが上記OpenSSLでビルド
・ブラウザがSNI対応
そもそもCentOS5にはそんな標準リポジトリがありません。じゃあどうするの!?となりますが、
ここがインフラエンジニア(SRE)の見せどころですな!!!(白目)
今回はハイパー究極のソースからダウンロードしてビルドしまくるという
方法で可能にしたので、ブログします。(メンバーには助かりました…)
■そもそもSNIとは
http://www.pc-freak.net/blog/tag/sni/
Server Name Indicationの略でSSLプロトコルの拡張機能となります。
以下のようにSSLStrictSNIVHostCheck offをぶち込めばSNI未対応ブラウザの挙動を制御する設定となるので、1IP上に複数のSSLサイトを構築できるようになります。
・httpd.conf
1 2 3 |
Listen 443 NameVirtualHost *:443 SSLStrictSNIVHostCheck off |
nginxであれば以下のように確認できれば実現可能となります。H2Oはわからん。
1 2 3 |
$ nginx -V nginx version: nginx/1.14 TLS SNI support enabled |
■download openssl-1.0.2
OpenSSLが0.9.8f以上なので1.0.2をソースダウンロードしてみました。
1 2 3 4 5 6 7 8 9 |
# wget https://www.openssl.org/source/openssl-1.0.2n.tar.gz --no-check-certificate # tar xzvf openssl-1.0.2n.tar.gz # ./config shared enable-ssl2 enable-ssl3 --prefix=/usr # make depend # make # make test # make install # openssl version OpenSSL 1.0.2n 7 Dec 2017 |
!!!
■download apache 2.2.22 and read mod_ssl
https://doruby.jp/users/yokian/entries/apxs_
mod_sslをビルドし直さないとライブラリ参照先が変わらないので、
apache 2.2.2のmod_sslをパクリからのapxsでモジュールのみ再コンパイルします。
1 2 3 4 5 |
# yum install distcache-devel zlib-devel # cd /usr/local/src # wget http://archive.apache.org/dist/httpd/httpd-2.2.22.tar.gz # cd httpd-2.2.22/modules/ssl/ # apxs -c -i *.c -lssl -lcrypto -ldl -lz -ldistcache |
!!!!
あとはSSLStrictSNIVHostCheck offを追加して、
apache再起動すればOKです!!!
■まとめ
めちゃくちゃいい経験となった。。。
ちなみにCentOS5でのLet’s Encryptは旧名であるShell script client: dehydratedを使うみたい。(なにそれ)
そしてこのブログは需要あるのか!?
0件のコメント