Let's EncryptをUbuntuのnginxで導入するまで|無料のSSL証明書を発行してhttps通信

Let's EncryptをUbuntuのnginxで導入するまで|無料のSSL証明書を発行してhttps通信
Let's EncryptをUbuntuのnginxで導入するまで|無料のSSL証明書を発行してhttps通信

cerbotのインストール

Let's Encryptを簡単に導入してくれるアプリケーション「cerbot」をインストールします。

shell
$ sudo apt install certbot python3-certbot-nginx

インストールされたバージョンは次のとおり。

shell
$ certbot --version
certbot 1.21.0

443ポートの開放

ファイアーウォールやパケットフィルターなどを使っている場合は、443ポートを開放します。

certbotでSSL証明書を発行

それではcertbotを使って、SSL証明書を発行しましょう。

shell
$ sudo certbot --nginx -d kitchen-note.fun
kitchen-note.fun はnginxで設定してあるドメインになります。

certbotでSSL証明書の自動更新

SSL証明書は3か月のみ有効なので、期限が迫ってきたら自動で更新できるようにしておきましょう。

shell
$ 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)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
success が表示されていれば成功です。

nginxの設定ファイルにSSL証明書のパスが追加されていることを確認します

shell
$ sudo vi /etc/nginx/sites-enabled/default

次の画像の通り、ssl_certificate(SSL証明書)、ssl_certificate_key(秘密鍵)のパスが追加されていればOKです。

/etc/nginx/sites-enabled/default
/etc/nginx/sites-enabled/default

nginxの構文チェック

次のコマンドでnginxの構文チェックをし、問題がないか確かめておきましょう。

shell
$ 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 のアクセスは次のようにエラーになってしまいます。

https、www付きでリダイレクトされない
https、www付きでリダイレクトされない

実はこの記事の前半で設定した証明書は、www付きのドメインアクセスでは使用できません。つまりは、www付きドメイン用のSSL証明書も別途用意しなければならないということです。 といっても解説した手順でやればとても簡単ですので、めんどくさがらずに進めてみましょう。次のコマンドで、www付きドメインのSSL証明書を発行、自動更新します。

shell
$ sudo certbot --nginx -d www.kitchen-note.fun
$ sudo certbot renew --dry-run

証明書がインストールできたら /etc/nginx/sites-enabled/default を以下のように修正します。

ini
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を再起動させましょう。

shell
$ sudo nginx -t
$ sudo systemctl restart nginx

これでwwwあり・httpアクセスを、https・wwwなしにリダイレクト、統一できました。

関連記事

最後までご覧いただきありがとうございます!

▼ 記事に関するご質問やお仕事のご相談は以下よりお願いいたします。
お問い合わせフォーム