無料で常時SSL化「Nginxでhttps化」
Webサイト(Nginx)の常時SSL化方法をご紹介します。HTTPではGoogle Chromeで警告が表示されるため、WebサイトのSSL化が必須となっています。Googleによると、WebページをSSL化しているかどうかでSEOにも影響があると書かれています。現在は証明書の品質は関係ない旨も記載されていますので、Webページをお持ちの方はSSL化することが重要です。そこで、無料で常時SSL化して、SSL証明書を定期的に自動更新する方法をご紹介します。
Let’s Encrypt
証明書は無料で手に入れることができます。それは、Let’s Encryptを利用することです。Let’s Encryptは米国の非営利団体であるISRGにより運営されています。無料で利用できる証明書ですので、個人でWebページを運営している人は利用するしかないですね。
certbotのインストール
まずはcertbotのインストールです。コマンド一つでできるので簡単です。前提で、CentOSでyumコマンドを利用します。
sudo yum -y install certbot
完了しました!
certbotで証明書作成
certbotコマンドが打てるようになりましたら、以下のコマンドにて証明書の作成ができます。対話型でも入力していくことができますが、1行入力するのみでも証明書が作成できます。certbotでは80番ポートを利用するので、80番ポートを利用しているWebサーバがあれば事前に停止しておく必要があります。
sudo systemctl stop nginx.service
sudo certbot certonly --standalone -d example.work -m admin@example.work --agree-tos -n
sudo systemctl start nginx.service
因みに80番ポートを利用中の場合は、こちらのエラーが発生します。
Problem binding to port 80: Could not bind to IPv4 or IPv6.
証明書は「/etc/letsencrypt/live/example.work/」に4つのファイルができます。その中でも、以下の2つを利用します。
・fullchain.pem:証明書
・privkey.pem :証明書の秘密鍵
nginxの設定変更
certbotコマンドで作成できた証明書をnginxに設定します。設定ファイル(/etc/nginx/conf.d/default.conf等)にSSLの設定を追記します。設定追加はhttpをhttpsにリダイレクトする設定と、今回作成した証明書でhttpsでアクセスできるようにする設定です。
以下、追記設定です。
server {
listen 80;
server_name example.work;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.work/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.work/privkey.pem;
}
証明書の自動更新設定
コマンドラインで証明書を取得できれば、あとはcron設定するだけで自動で証明書を更新し、常時SSL化に対応できます。環境によりますが、こちらではcronでrootユーザとしてコマンドを実行するよう設定します。SSL化の更新は有効期限が残り30日以内に実施可能となるため、月2回確認するようにしています。
$ sudo crontab -u root -e
0 1 1 * * systemctl stop nginx.service
1 1 1 * * certbot renew
3 1 1 * * systemctl start nginx.service
0 1 20 * * systemctl stop nginx.service
1 1 20 * * certbot renew
3 1 20 * * systemctl start nginx.service
終わりに
無料でWebサイトを常時SSL化する方法についてご紹介しました。簡単ですので、Webページをお持ちの方はお試ししてみると良いと思います。