SSL LabsでサイトのSSLについて診断したところ評価がFとなってしまった;;
- 脆弱な通信を許可している設定となってしまっている模様
- 改善する
- OpenSSL1.0.2が2019年末でEOLとなってしまう模様
- OpenSSL1.1.1に乗り換える
- TLSv1.0 TLSv1.1をサポートしてると2020年1月より評価がBで固定となってしまう模様(上記画像の橙色部分)
- 改善しておく
- 改善するとAndroid4.3以下くらいの古い端末で見れなくなってしまう模様
- TLSv1.3に対応していない
- 改善する
現在の設定状況について
いろいろ書いてあるけどProtocols以外は正直よくわかってない(^^;
上の画像で重要なのはCipher Suites欄の赤字でINSECUREって書いてあるところ、Protocols欄のTLS 1.3がNoとなっているところぐらいかと思います(^^;
nginxのOpenSSL1.1.1対応(再ビルド)
当ブログのnginxはソースからビルドしてた模様(忘れてた)。
当時の記事:さくらVPSのhttpdをnginxに置き換え、HTTP2.0に対応、キャッシュプラグインの導入など
ビルドの際のコマンドなんかも残してたので流用しました。
# cd /usr/local/src # wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz # tar zxvf openssl-1.1.1d.tar.gz # cd nginx-1.16.0 # ll 合計 28156 drwxr-xr-x 18 root root 4096 11月 1 04:00 2019 letsencrypt drwxr-xr-x 9 1001 1001 4096 6月 25 00:48 2019 nginx-1.16.0 -rw-r--r-- 1 root root 1032345 4月 23 22:58 2019 nginx-1.16.0.tar.gz drwxr-xr-x 9 1001 1001 4096 6月 24 21:42 2019 nginx-1.16.0_bak drwxr-xr-x 3 postgres wheel 4096 12月 24 03:40 2014 ngx_cache_purge-2.3 -rw-r--r-- 1 root root 12248 12月 24 03:41 2014 ngx_cache_purge-2.3.tar.gz drwxr-xr-x 21 root root 4096 6月 25 00:51 2019 openssl-1.0.2r -rw-r--r-- 1 root root 5348369 2月 26 23:34 2019 openssl-1.0.2r.tar.gz drwxrwxr-x 18 root root 4096 9月 10 22:13 2019 openssl-1.1.1d -rw-r--r-- 1 root root 8845861 9月 10 22:53 2019 openssl-1.1.1d.tar.gz -rw-r--r-- 1 root root 13561332 6月 12 16:42 2018 wkhtmltox-0.12.5-1.centos6.x86_64.rpm # /etc/init.d/nginx stop # mv Makefile Makefile.20191215 # ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-openssl=../openssl-1.1.1d/ --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pipe' --add-module=/usr/local/src/ngx_cache_purge-2.3 # make && make install
以前のビルドの際に使用したソースをそのまま使用しました。
nginx1.16.0+openssl1.0.2rという組み合わせだった模様。
ビルドの際に作られたMakefileを避けて、with-opensslオプションで指定するOpenSSLのソースディレクトリを変更してビルドしました。OpenSSL自体はインストールしなくていいっぽい。
前回、Docker環境でのOpenSSLのアップデートの手順とか作ったりしましたがhttpdの方もOpenSSL自体のアップデートは不要だったのかもしれない?
また、with-ipv6というオプションを指定してたところ、configure自体は通りましたが末尾の行に「./configure: warning: the “–with-ipv6” option is deprecate」という非推奨のワーニングが出てたのでその辺外したりもしました。
nginxの設定ファイル修正
# vi /etc/nginx/conf.d/blog.imo-tikuwa.com.conf # vi /etc/nginx/conf.d/etc.imo-tikuwa.com.conf ////////// ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets on; - ssl_ciphers ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!EXPORT:!DES:!3DES:!MD5:!DSS; - ssl_protocols TLSv1 TLSv1.1 TLSv1.2; +# ssl_ciphers ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!EXPORT:!DES:!3DES:!MD5:!DSS; + ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ////////// # /etc/init.d/nginx start
ssl_cipersはよくわからないので設定自体をコメントアウトしてデフォルトに従うことにしました。
ssl_protocolsはSSL Labsの評価を第一に考えた設定(TLSv1.0とTLSv1.1無効化、TLSv1.3有効化)としました。
SSL Labsで再テスト
同じドメインのテストは時間をおかないとダメっぽい?ので現在も使っているetcサブドメインでテストしてみました。
TLSv1.3が有効化されていること、TLSv1.0とTLSv1.1が無効化されていることを確認しました。
参考にした記事ではA+となっていたので何が足りないのか調べたところHSTSに関する設定が必要とのこと。
DNS CAAについてNoと表示されているところについては次の修正を行いました。
DNS CAAについて設定する
DNS CAAについて:DNS CAA レコード設定について ーさくらのサポート情報
お名前.comのDNSレコード設定画面から設定しました。
お名前.comでログインにやたら時間が掛かった。謎。
HSTS(Strict-Transport-Security)の設定追加
HTTP の
Strict-Transport-Security
レスポンスヘッダー (しばしば HSTS と略されます) は、ウェブサイトがブラウザーに HTTP の代わりに HTTPS を用いて通信を行うよう指示するためのものです。最初にサイトに HTTPS でアクセスして
Strict-Transport-Security
ヘッダーが返されると、ブラウザーはこの情報を記録し、以降は HTTP を使用してサイトを読み込みもうとすると、自動的に HTTPS を使用するようになります。
# vi /etc/nginx/conf.d/blog.imo-tikuwa.com.conf # vi /etc/nginx/conf.d/etc.imo-tikuwa.com.conf ////////// + add_header Strict-Transport-Security 'max-age=31536000;' always; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets on; //////////
上記のように設定してみました。
OCSP Staplingの設定追加
今回参考にした記事の1つで紹介されてたのでついでに設定してみました。
SSL Labsの点数改善には影響しない模様。
# cd /etc/ssl # openssl dhparam 2048 -out dhparam.pem # vi /etc/nginx/conf.d/blog.imo-tikuwa.com.conf # vi /etc/nginx/conf.d/etc.imo-tikuwa.com.conf ////////// add_header Strict-Transport-Security 'max-age=31536000;' always; + ssl_trusted_certificate /etc/letsencrypt/live/imo-tikuwa.com/fullchain.pem; + ssl_dhparam /etc/ssl/dhparam.pem; + ssl_stapling on; + ssl_stapling_verify on; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets on; //////////
nginx側の設定を行う前にssl_dhparamに設定するファイルを生成しました。
設定後、nginxを再起動しました。
SSL Labsで再々テスト
再テストのときと同様にblog、etcのサブドメインでは前回診断したときの結果が表示されてしまうため、サブドメインなしのドメインでテストしてみました。
無事にA+の評価をいただくことが出来ました。
DNS CAAについてNoと表示されてた箇所にYesと設定値が反映されていることを確認できました。
HSTSについても設定後、Yesと表示されていることを確認しました。