ゴール
- ssl化する
- https://www.ssllabs.com/ で A+ 評価をとる
- とった。じんわりうれしいです。
環境
- さくらVPS
- Ubuntu
- nginx
- NodeJS(express + nuxt)
- postgreSQL
ざっくりな流れ
- 無料の Let's Encrypt で SSL化する
- cronで Let's Encrypt の自動更新を仕込む
- nginxの設定をゴニョゴニョする。
Let's Encrypt
- 無料でSSL/TLSサーバ証明書を取得して、ウェブサイトをHTTPS化することができる。
- 詳細は日本語ポータルへ
インストール
- サーバに接続する
- ちなみにサーバにはpython 2.7 以降がインストールされている必要があるとのこと。
- 任意のディレクトリでcertbotを
git clone
git clone https://github.com/certbot/certbot.git
- クローンした certbot ディレクトリで
certbot-auto help
を実行。ここで必要なライブラリなどがインストールされる。正常に終わるとhelpが表示される。
cd certbot
./certbot-auto --help
実行
- 80ポートと443ポートを開いておく
- nginxは一旦stopしとく
sudo service nginx stop
- 以下を実行
./certbot-auto certonly --standalone -d ドメイン名 -d www.ドメイン名
- 途中、Emailアドレス聞かれたり、利用規約同意求められたりするので普通に答える。
- うまくいくと
Congratulations!
と共にfullchain.pem
とprivkey.pem
の出力先が表示される。
nginx
ssl対応
- 443ポートをlisten
default.conf
# httpをリダイレクト
server {
listen 80 default_server;
return 301 https://imatomix.com$request_uri;
}
# https
server {
listen 443 ssl http2;
server_name imatomix.com;
ssl on;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
....
}
- nginx 起動
sudo service nginx start
- ここまでで https://www.ssllabs.com/ は A-。
A+化
- 「The server does not support Forward Secrecy with the reference browsers. Grade reduced to A-.」とある。ググる。
- Forward Secrecy に対応させる必要があり、そのためには鍵交換時の暗号化方式に ECDH を指定する必要があるとのこと。
- あと、SSLもいろいろで、脆弱な暗号化方式があるらしい。それらを無効化するといいらしい。
- nginxの設定を修正
default.conf
# https
server {
listen 443 ssl http2;
server_name imatomix.com;
ssl on;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDH !aNULL !eNULL !SSLv2 !SSLv3';
....
}
- これでA+でた。
cronで自動更新
- root権限でcrontabを編集
su -
crontab -e
crontab は初めての場合はエディタを聞かれる。好みのエディタを選択。
crontabにcronを記入。
00 05 01 * * service nginx stop && /path/to/certbot-auto renew --force-renewal && service nginx start
- これで毎月朝5時に自動更新される、はず。