早くHTTPSになりたい

早くHTTPSになりたい

WebサイトのHTTPS対応 ついでにHTTP2も対応

WebサイトをHTTPSに対応させる。ついでにHTTP2も対応する。
環境:CentOS 8 / nginx 1.17.10

1. certbotの使い方を調べる

HTTPSに対応させるためには証明書が必要。
証明書の発行はcertbotを使うと簡単らしいので使う。
certbotの公式ページを見ると環境ごとの手順がわかる。



「Software」と「System」に自分の環境を入れる。今回は、
My HTTP website is running 「Nginx」 on 「CentOS/RHEL 8」



必要な条件がいくつかある。

  • ①コマンドラインを使用できる
  • ②ポート80を開けて ③ネットにつながっている ④HTTPのWebサイトがある
  • ↑が ⑤サーバに置いてあり ⑥SSHでアクセスでき ⑦sudo権限を持っている

全部そろってるのでやる。

2. 以下、SSHでサーバに入って作業

2.1 certbot をインストール

certbotの公式ページによると最初に「EPELの有効化」という作業が必要。
いらないのでは?と思い無視して次の手順「certbotインストール」のコマンドを実行。

1
2
sudo -s
dnf install certbot python3-certbot-nginx

成功。
途中で「EPEL」という単語が出てきたのでCentOSさんが良い感じにやってくれたのだと思う。

2.2 certbot で証明書を作成

はじめにcertbotが働くためのフォルダを作る。
証明書を作るときに一時ファイルを作るらしい。
名前はcertbotとした。

1
mkdir /www/certbot

vinginxの設定ファイルを編集。

1
vi /etc/nginx/conf.d/default.conf

元々あったlocation /{}の上にlocation /.well-known{}を追加。
中身のroot /www/certbot;はさっき作ったフォルダ。

1
2
3
location /.well-known{
root /www/certbot;
}

変更後、nginxの設定を再読み込み。

1
systemctl reload nginx

次に下記のコマンドで証明書を作成してもらう。
/www/certbotはさっき作ったフォルダ。
circleken.netはドメイン名。

1
certbot certonly --webroot -w /www/certbot -d circleken.net

メールアドレスなど聞かれるので答える。
証明書の期限が切れそうになるなどしたらメールで教えてくれるらしい。

その後、自動的に証明書の取得まで行われる。

2.3 nginxの設定ファイルに証明書を設定

さっき作った証明書を使うためにnginxの設定ファイルを編集する。

vinginxの設定ファイルを編集。

1
vi /etc/nginx/conf.d/default.conf

元々あったserver{}の下にserver{}を追加。
中身のroot, indexは既存のserver{}に書いてあるものをコピー。
他は下記の通り。

1
2
3
4
5
6
7
server{
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;
root /www/public;
index index.html index.htm;
}

変更後、nginxの設定を再読み込み。

1
systemctl reload nginx

2.4 ファイアウォールにHTTPSアクセスを許可してもらう

ファイアウォールがHTTPSによるアクセスを許可していないと入れない。
許可されているかどうかは下記コマンドで調べられる。

1
firewall-cmd --list-all

表示されるメッセージのservices:の欄にhttpsがあればOK。
無ければ下記コマンドで許可してもらう。

1
2
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

3. WebサイトにHTTPSでアクセス

https://<ドメイン名>にアクセス。



鍵がついてる。
成功。

4. HTTPSリダイレクト

今のままだとHTTPでもアクセス可能なので、HTTPでアクセスされた際にHTTPSにリダイレクトするようにする。

vinginxの設定ファイルを編集。

1
vi /etc/nginx/conf.d/default.conf

元々あったlocation /{}の中身を変更。

1
2
3
location /{
return 301 https://$host$request_uri;
}

変更後、nginxの設定を再読み込み。

1
systemctl reload nginx

http://<ドメイン名>にアクセスして、
https://<ドメイン名>に飛べばOK。

5. 証明書の自動更新

certbotによって取得した証明書は90日で期限が切れる。

1
2
certbot renew
systemctl reload nginx

のコマンドで更新できるが、90日ごとに作業をしたくない。
そこで、crontabによりコマンドを定期実行してもらう。

下記のコマンドでcrontabのエディタが開く。

1
crontab -e

設定ファイルをviと同じように編集できる。
定期実行するコマンドと日時を書き込む。

1
3 2 1 * * /usr/bin/certbot renew && /bin/systemctl reload nginx

毎月123分に/usr/bin/certbot renew/bin/systemctl reload nginxのコマンドが実行されるようにした。

1
crontab -l

で設定した内容が確認できる。

6. HTTP2に対応

HTTP2に対応させる。

vinginxの設定ファイルを編集。

1
vi /etc/nginx/conf.d/default.conf

さっきの

1
2
3
4
5
6
7
server{
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;
root /www/public;
index index.html index.htm;
}

の、listen 443 ssl;listen 443 ssl http2;にするだけ。簡単。

変更後、nginxの設定を再読み込み。

1
systemctl reload nginx

参考

certbot公式
crontabのガイドライン
nginx実践ガイド Amazon

タグ ,

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×