Let's EncryptをUbuntuのnginxで導入するまで|無料のSSL証明書を発行してhttps通信
cerbotのインストール
Let's Encryptを簡単に導入してくれるアプリケーション「cerbot」をインストールします。
$ sudo apt install certbot python3-certbot-nginx
インストールされたバージョンは次のとおり。
$ certbot --version
certbot 1.21.0
443ポートの開放
ファイアーウォールやパケットフィルターなどを使っている場合は、443ポートを開放します。
certbotでSSL証明書を発行
それではcertbotを使って、SSL証明書を発行しましょう。
$ sudo certbot --nginx -d kitchen-note.fun
certbotでSSL証明書の自動更新
SSL証明書は3か月のみ有効なので、期限が迫ってきたら自動で更新できるようにしておきましょう。
$ sudo certbot renew --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/kitchen-note.fun.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for kitchen-note.fun
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/kitchen-note.fun/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
nginxの設定ファイルにSSL証明書のパスが追加されていることを確認します
$ sudo vi /etc/nginx/sites-enabled/default
次の画像の通り、ssl_certificate(SSL証明書)、ssl_certificate_key(秘密鍵)のパスが追加されていればOKです。
nginxの構文チェック
次のコマンドでnginxの構文チェックをし、問題がないか確かめておきましょう。
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
ブラウザからドメインへhttpsでアクセスできるか確認
ブラウザでドメインへhttpsアクセスして、証明書が確認できればLet's Encryptの設定完了です。
wwwあり・httpアクセスを、https・wwwなしにリダイレクトさせたい
wwwありとなしを統一することで、SEO効果が見込める可能性があるようです。wwwありとなしのドメインの両方でアクセスできてしまうと、Google検索エンジンが二つのページが存在すると勘違いしてしまう可能性があり、評価が分散されてしまう恐れがあるからです。
さて、前回の記事 Ubuntuにnginxをインストールしてウェブサーバーを立ち上げる の後半で、wwwありをwwwなしに統一する設定をnginxで行いました。httpの場合はスムーズにできるのですが、Let's Encryptを使ったhttpsの場合はちょっと工夫が必要です。
前回の設定だけですと、http://www へのアクセスはリダイレクトできても https://www のアクセスは次のようにエラーになってしまいます。
実はこの記事の前半で設定した証明書は、www付きのドメインアクセスでは使用できません。つまりは、www付きドメイン用のSSL証明書も別途用意しなければならないということです。 といっても解説した手順でやればとても簡単ですので、めんどくさがらずに進めてみましょう。次のコマンドで、www付きドメインのSSL証明書を発行、自動更新します。
$ sudo certbot --nginx -d www.kitchen-note.fun
$ sudo certbot renew --dry-run
証明書がインストールできたら /etc/nginx/sites-enabled/default を以下のように修正します。
server {
server_name www.kitchen-note.fun kitchen-note.fun;
return 301 https://kitchen-note.fun$request_uri;
}
server {
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/www.kitchen-note.fun/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/www.kitchen-note.fun/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
server_name www.kitchen-note.fun;
return 301 https://kitchen-note.fun$request_uri;
}
server {
root /home/ubuntu/kitchen-note/xxxxxxx;
index index.html;
server_name kitchen-note.fun;
....
最初のserverディレクティブでは、 http://www.kitchen-note.fun へのアクセスを https://kitchen-note.fun へリダイレクトさせてます。 2番目のserverディレクティブでは、 https://www.kitchen-note.fun へのアクセスを https://kitchen-note.fun へリダイレクトさせてます。この2番目のserverディレクティブを有効にするために、ww付きドメインのSSL証明書が必要だったわけですね。 最後のserverディレクティブは、すでに設定してきたメインの記述ですので変更は加えません。
設定ファイルの変更をおこなったら、文法チェックをし、nginxを再起動させましょう。
$ sudo nginx -t
$ sudo systemctl restart nginx
これでwwwあり・httpアクセスを、https・wwwなしにリダイレクト、統一できました。