結論
複数サーバを設定している場合、一つのサーバだけ変更しても有効とならない
概要
環境
CentOS7、nginx1.15.7
概要
CentOS7とyumでインストールしたnginxを使用してリバースプロキシとして利用しています。
複数Siteを一台で運用するため、server_nameでおのおののSiteを記述しています。
SSLの設定もその中に記載していました。
server {
listen 443 ssl http2;
server_name honban-site.example.com;
ssl_protocols TLSv1.0,TLS1.1,TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
・・・省略
}
server {
listen 443 ssl http2;
server_name test-site.example.com;
ssl_protocols TLSv1.0,TLS1.1,TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
・・・省略
}
さて、セキュリティ向上のため、TLS v1.0、v1.1は停止し、TLSv1.2のみとする設定のテストとして
test-site.example.com だけを下記のように変更しました。
server {
listen 443 ssl http2;
server_name honban-site.example.com;
ssl_protocols TLSv1.0,TLS1.1,TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
・・・省略
}
server {
listen 443 ssl http2;
server_name test-site.example.com;
ssl_protocols TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
・・・省略
}
ssl_protocols TLSv1.0,TLS1.1,TLSv1.2; → ssl_protocols TLSv1.2;
さて、これでnginxをreloadし、SSL Server TESTサイトから確認をします。
が~~~ん、1.0,1.1ともYesですよ
test-site.example.comの設定だけ変更しても望んだ結果とはなりませんでした。
解決策
解決策をいろいろ探した(ぐっぐただけとも言う)けど、見つからなかった・・・
そうこうするうち、どこかのSite(すいません、思い出したらリンク張ります)で、ssl_protocolsはhttpセクションに書きましょうとの記事を見つけました。
その構成にするにはnginx自体を複数立ち上げないといけないな・・・ いっそ、別サーバを立ててしまおう。
ということで、おのおの別々のサーバにてリバースプロキシを構築しました。
そうすると、なにもなかったかのようにすんなりTLSv1.2のみとなりました。
これは推測に過ぎませんが、複数サーバでserverセクションにssl_protocolsを記載した場合、利用しているすべてのプロトコルに反応してしまうようです。
また、もとの記述で双方のserverのssl_protocolsをTLSv1.2のみにすることでもv1.0,v1.1は無効となりました。
これが正解かはわかりませんが、少なくともserver_nameで分離した定義のつもりでもssl_protocolsはすべて合わせたプロトコルに反応するので、サーバを分ける、あるいは別ポートでnginxを起動する等の対応でしのげることがわかりました。
2019/04/23 記載