実験用にWebARENAでUbuntuサーバを立ててみます。
まずは、サーバのインスタンスを生成して、nginx + Let’s Encypt をインストールするところまでです。以下では、ホスト名を example.com と仮定します(置換しています)。
インスタンスの作成
インスタンスの作成は
https://help.arena.ne.jp/hc/ja/articles/360049806534/
に沿って行います。OSインストールにはそこそこ時間がかかります。作成したら起動します。
SSH秘密鍵のインポート
秘密鍵ファイルを .ssh の下にコピーして、
$ chmod 600 (鍵ファイル)
としておきます。その状態で、
$ ssh ubuntu@(IPアドレス) -i ~/.ssh/(鍵ファイル名)
としてリモートログインします。
・・・と、その前に、鍵ファイルにパスフレーズを設定します。
$ ssh-keygen -f ~/.ssh/(鍵ファイル名) -p
でパスフレーズを設定しておきます。
root権限に昇格してアップデートをかけます。その後、自動アップデートを有効にします。
ubuntu@i-xxxxxxxx:~$ sudo su - root@i-xxxxxxxx:~# apt-get update root@i-xxxxxxxx:~# apt-get upgrade root@i-xxxxxxxx:~# dpkg-reconfigure -p low unattended-upgrades root@i-xxxxxxxx:~# cat /etc/apt/apt.conf.d/20auto-upgrades APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1";
ただ、自動アップデートは始めから有効になっているように思います。
お名前.com 側でネームサーバの設定
以下の手順でお名前.com側でネームサーバの設定を行う。
1.管理画面にログイン
2.ドメイン機能一覧を表示させる
3.ネームサーバー設定の中の「ネームサーバーの変更」をクリック
4.設定するドメインを選択する
5.お名前.comのネームサーバを使うを選択
6.ネームサーバーの設定の中の「DNS設定/転送設定」をクリック
7.対象のドメインを選択して「次へ」
8.「DNSレコード設定を利用する」の右の「設定する」をクリック
9.設定を入力する
ホスト名は空欄、TYPEはAのまま、VALUEに設定するIPアドレスを記入して「追加」をクリック
10.下の方の「DNSレコード設定用ネームサーバー変更確認」に必要に応じてチェックを入れて(基本入れる)、確認画面に進むをクリック
11.あとは流れに従う
12.しばらくすると、ホスト名で ping が返ってくるようになる。
ファイアウォールの設定
これはWebArenaで用意されているファイアウォールのこと。
設定すると、ICMPも通らなくなるため、ファイアウォールの設定はしない。(が、落ち着いたら設定したほうがいいかもしれない)
nginxのインストール
以下の手順で nginx をインストールします。
root@i-xxxxxxxx:~# apt-get install nginx
インストールすると、Webブラウザでテスト画面が表示できるようになる。
certbotのインストール
ここからは Let’s Encrypt のインストールです。参考にしたのはこちら
root@i-xxxxxxxx:~# add-apt-repository ppa:certbot/certbot root@i-xxxxxxxx:~# apt-get update root@i-xxxxxxxx:~# apt-get install python-certbot-nginx
nginx の config 作成
/etc/nginx/sites-available/default を編集してホスト名を記載します。
# Default server configuration # server { : server_name example.com; : }
編集したら
root@i-xxxxxxxx:/etc/nginx/sites-available# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
で設定ファイルをチェックしてから、nginx を再起動します。
root@i-xxxxxxxx:/etc/nginx/sites-available# service nginx restart
ファイアウォールの設定
こっちはUbuntuというかLinuxカーネルで持っているファイアウォール(ufw)のこと。初期設定ではファイアウォールは無効になっているので、必要なポートの穴あけをしてから有効化します。
root@i-xxxxxxxx:/etc/nginx/sites-available# ufw status Status: inactive root@i-xxxxxxxx:/etc/nginx/sites-available# ufw allow 22 root@i-xxxxxxxx:/etc/nginx/sites-available# ufw allow 80 root@i-xxxxxxxx:/etc/nginx/sites-available# ufw allow 443 root@i-xxxxxxxx:/etc/nginx/sites-available# ufw enable root@i-xxxxxxxx:/etc/nginx/sites-available# ufw status Status: active To Action From -- ------ ---- 22 ALLOW Anywhere 80 ALLOW Anywhere 443 ALLOW Anywhere 22 (v6) ALLOW Anywhere (v6) 80 (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6) root@i-xxxxxxxx:/etc/nginx/sites-available#
証明書の取得
ドメイン認証を使用して証明書を取得します。
root@i-xxxxxxxx# certbot --nginx -d example.com
質問でメールアドレス、メールアドレスをEFFと共有するか、HTTPをHTTPSにリダイレクトするかなどを聞いてくるので、適当に答えます。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://example.com You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=example.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2020-10-31. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
と出力されれば成功。この時点で、HTTPSにリダイレクトされるようになっています。
証明書の自動更新の設定
証明書の自動更新の設定を行います。
root@i-xxxxxxxx:/etc/nginx/sites-available# certbot renew --dry-run Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/example.com.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator nginx, Installer nginx Renewing an existing certificate Performing the following challenges: http-01 challenge for example.com Waiting for verification... Cleaning up challenges - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - new certificate deployed with reload of nginx server; fullchain is /etc/letsencrypt/live/example.com/fullchain.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates below have not been saved.) Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/example.com/fullchain.pem (success) ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates above have not been saved.) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. root@i-xxxxxxxx:/etc/nginx/sites-available#
Let’s Encrypt の導入も随分と簡単になったものです。