Tasking Manager 3のサイトを HTTPS 化する
前回設定した Tasking Manager 3 を Let's Encrypt で HTTPS 化します。
作業はこんな感じ。
- 設定のバックアップ
- certbot の導入
- nginxの設定
- Tasking Managerの設定
- 自動更新の設定
設定のバックアップ
etckeeper でいいやって楽しました。
$ sudo apt install -y etckeeper
debian 9.4 では勝手に Initial commit
までやってくれました。
次に certbot に渡す nginx のドキュメントルートを確認しておきます。
今回はこんな感じになっています。
/home/%user name%/tasking-manager/server/web/static/dist
ファイアウォールで https 接続で使われるポートを開けておきます。
$ sudo ufw allow https
certbot の導入・証明書取得と作成
Let's Encrypt の処理をよしなにやってくれる certbot を導入します。
wget でホームディレクトリの src 内に certbot ディレクトリを作ってそこに置いておきます。
$ mkdir -p ~/src/certbot $ cd ~/src/certbot $ wget https://dl.eff.org/certbot-auto $ chmod a+x certbot-auto
配置できたら早速証明書の取得をします。
確認しておいた nginx のドキュメントルートとドメインを渡して実行すればOK。
$ certbot-auto certonly --webroot \ -w /home/%user name%/tasking-manager/server/web/static/dist \ -d %ドメイン%
取得した証明書は次のディレクトリに保存されていました。
/etc/letsencrypt/archive/%ドメイン%/fullchain1.pem; /etc/letsencrypt/archive/%ドメイン%/privkey1.pem;
Key Exchange のスコアを上げるために dhparam を作っておきます。
$ sudo openssl dhparam -out /etc/ssl/dhparam.pem 2048
個々で指定したパス /etc/ssl/dhparam.pem
は nginx の設定に使います。
nginx の設定
nginx の設定ファイルを書き換えます。
$ sudo vi /etc/nginx/sites-available/tm3
次の行を追加しました。確認した証明書の保存場所をここで使います。
元からあった listen 80;
と同じインデントレベルに置いてあります。
listen 443 ssl; ssl_certificate /etc/letsencrypt/live/%ドメイン%/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/%ドメイン%/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/%ドメイン%/fullchain.pem; //openssl で作った dhparam へのパスです ssl_dhparam /etc/ssl/dhparam.pem; ssl_stapling on; ssl_stapling_verify on; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_ciphers ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!EXPORT:!DES:!3DES:!MD5:!DSS; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security max-age=15768000;
書き換えたら nginx をリロードしてエラーが出なければOK。
$ sudo systemctl reload nginx.service
2018-11-08 修正
更新がうまく行かなかったので設定ファイルを変更しました。
- ssl_certificate /etc/letsencrypt/archive/%ドメイン%/fullchain1.pem; - ssl_certificate_key /etc/letsencrypt/archive/%ドメイン%/privkey1.pem; - ssl_trusted_certificate /etc/letsencrypt/archive/%ドメイン%/fullchain1.pem; + ssl_certificate /etc/letsencrypt/live/%ドメイン%/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/%ドメイン%/privkey.pem; + ssl_trusted_certificate /etc/letsencrypt/live/%ドメイン%/fullchain.pem;
詳しい内容はコチラ↓
Tasking Manager の設定
Tasking Manager には OSM アカウントで認証した後に戻ってくるコールバック URL などで使われる APP_BASE_URL が設定されているので、ここを https にしておかないとアカウント認証をして Tasking Manager に戻ってくる時に http 接続に戻ってしまいます。
$ cd ~/tasking-manager/server/ $ vi config.py
下記の部分を書き換えればOK。
class ProdConfig(EnvironmentConfig): - APP_BASE_URL = 'http://%ドメイン%' + APP_BASE_URL = 'https://%ドメイン%'
gunicorn を再起動させます。
$ sudo systemctl restart tm3.service
ここで Tasking Manager に HTTPS アクセスできれば大丈夫なはず。
自動更新の設定
自動で証明書が更新されるように cron に設定を追加します。
今回は毎月13日の午前3時00分に更新させる設定にしました。
crontab を使わずに直接 /etc/cron.d/
にファイルを作っちゃいました。
動かなかったらどうしよ(
sudo sh -c "echo '00 03 13 * * root /home/%user name%/src/certbot/certbot-auto renew --post-hook \"systemctl reload nginx.service\"' > /etc/cron.d/letsencrypt"
SSL のスコア
Qualys SSL LABS SSL Server Test でセキュリティレベルを計測したところ A+
でした。