posts
【第6回】HTTPS編 — 無料の証明書で鍵マークを付ける
(更新 )この記事を読み終えると、サイトが https:// で表示され、ブラウザで「この接続は保護されています」と確認できる状態になります。
HTTPとHTTPSの違い
| HTTP | HTTPS | |
|---|---|---|
| 通信の中身 | そのまま(平文)でやり取りされる | 暗号化される |
| ポート番号 | 80 | 443 |
| ブラウザの表示 | 「保護されていない通信」と警告が出る | 「この接続は保護されています」 |
| 必要なもの | 特になし | SSL証明書 |
HTTPのままだと、通信の中身を途中で誰かに読まれたり、書き換えられたりするおそれがあります。公共のWi-Fiでログイン情報を送るときの危なさ、という説明がよくされます。
それに加えて、ブログを運営する側にとっては次の理由でも必須です。
- ブラウザに「保護されていない通信」と出ると、読む人が不安になる
- このあと登録するSearch ConsoleやAnalyticsには、
https://のURLで登録しておくと、あとで直す手間がない
「https:// と書いただけ」では使えなかった話
筆者は、HTTPSを甘く見ていたせいで一度つまずいています。
Search Consoleにサイトマップを登録しようとしたとき、Hugoの設定ファイル(hugo.toml)の baseURL は、もう https:// にしていました。
baseURL = "https://noluckblog.com/"
ところが、サーバーにはまだ証明書を入れておらず、HTTPでしか公開していませんでした。 ブラウザで https://noluckblog.com を開くと、
接続できません
とはっきりエラーになりました。サイトマップも当然「取得できませんでした」のままです。
ここでようやく、HTTPSは https:// と書けば使えるものではなく、サーバーに証明書を用意して初めて使えるということが腑に落ちました。
証明書とは何か
SSL証明書は、ざっくり言うと「このドメインの持ち主が、このサーバーで暗号化通信をすることを認めた」という証明書です。これがないと、ブラウザは暗号化通信を始められません。
この記事では、Let’s Encryptという無料の発行元から証明書をもらいます。Certbotというツールを使うと、証明書の取得からNginxの設定の書き換えまで、コマンド1つで自動でやってくれます。
始める前に確認すること
nslookup example.comでサーバーのIPアドレスが出る(第4回)- ConoHaのセキュリティグループに
IPv4v6-Webが付いている(第3回) - ufwで
80と443を許可している(第5回)
操作手順
サーバーにSSHで入ってから打ちます。example.com は自分のドメインに置き換えてください。
- Certbot(証明書を取ってくるツール)を入れる
apt install certbot python3-certbot-nginx -y
- 証明書を取得する
certbot --nginx -d example.com -d www.example.com
- 質問に答える
| 質問 | 答え |
|---|---|
| メールアドレス | 自分のメールアドレス(期限切れの通知が届く) |
| 利用規約に同意するか | Y |
| お知らせメールを受け取るか | N でOK |
Successfully deployed certificateと出れば成功- ブラウザで
https://example.comを開き、アドレスバーの左にあるアイコンを押して「この接続は保護されています」と出るか確認する

- 自動更新が動くかテストする
certbot renew --dry-run
Congratulations, all simulated renewals succeeded と出ればOKです。
- 手元のPCで
hugo.tomlのbaseURLをhttps://に書き換える
baseURL = "https://example.com/"
書き換えたら、第7回の手順で公開し直します。証明書を入れてから baseURL を https:// にする、という順番が大事です。
証明書を入れたあとに変わったこと
https://noluckblog.comが、警告なしで開けるようになったhttp://で来た人も、自動でhttps://に転送されるようになった(Certbotが設定してくれた)- Search Consoleのサイトマップが「成功しました」になった
Certbotが何を書き足したかは、Nginxの設定ファイルを開くと分かります。
cat /etc/nginx/sites-available/yourlog
listen 443 ssl; や証明書の場所(ssl_certificate)の行が増え、末尾に # managed by Certbot と付いています。
つまずきやすい注意点
DNSが反映される前に実行すると失敗する
Certbotは「そのドメインが本当にこのサーバーを指しているか」を確認します。nslookup でIPアドレスが出るまで待ってください。
https が表示されない
443番が閉じている可能性があります。ufwとConoHaのセキュリティグループの両方を確認してください。→ ConoHa VPSでSSH接続できずハマった話
baseURLを http のままにしない
サイトマップが「無効」と言われるなど、あとで別のトラブルになります。逆に、証明書を入れる前に https:// にすると、上に書いたように「接続できません」になります。
Certbotが書いた行は消さない
CertbotはNginxの設定ファイルを自動で書き換えます。# managed by Certbot と付いた行は消さないでください。
証明書の期限は90日
自動更新されますが、ときどき確認しておくと安心です。
systemctl list-timers | grep certbot