Let’s Encryptは、無料のTLS /SSL証明書を取得してインストールし、Webサーバーで暗号化されたHTTPSを有効にする簡単な方法を提供する認証局(CA)です。必要な手順のほとんど(すべてではないにしても)の自動化を試みるソフトウェアクライアントCertbotを提供することにより、プロセスを簡素化します。 現在、証明書の取得とインストールのプロセス全体は、ApacheとNginxの両方で完全に自動化されています。
このチュートリアルでは、Certbotを使用して、Ubuntu 20.04上のNginx用の無料のSSL証明書を取得し、証明書が自動的に更新されるように設定します。
このチュートリアルでは、デフォルトファイルの代わりに別のNginxサーバー設定ファイルを使用します。アドバイス:各ドメインに新しいNginxサーバーブロックファイルを作成すると、よくある間違いを回避し、デフォルトファイルをフォールバック設定として維持するのに役立ちます。
このチュートリアルを実行するには、次のものが必要です。
Ubuntu 20.04の初期サーバーセットアップチュートリアルに従ってセットアップされたUbuntu 20.04サーバー1台、sudo権限を持つroot以外のユーザーおよびファイアウォール。
登録されたドメイン名。このチュートリアルでは、全体を通してexample.com
を使用します。Namecheapからドメイン名を購入するか、Freenomから無料で取得するか、あるいはお好みのドメインレジストラを使用できます。
次の2つのDNSレコードがサーバーにセットアップされています。 DigitalOceanをご使用の場合、追加方法の詳細についてはDNSドキュメントを参照してください。
example.com
を持つAレコード。www.example.com
を持つAレコード。Ubuntu 20.04にNginxをインストールする方法に従ってインストールされたNginx。ドメインのサーバーブロック。このチュートリアルでは、例として/etc/nginx/site-able/example.com
を使用します。
Let’s Encryptを使用してSSL証明書を取得する最初のステップは、サーバーにCertbotソフトウェアをインストールすることです。
apt
を使用してCertbotとNginxプラグインをインストールします。
- sudo apt install certbot python3-certbot-nginx
Certbotを使用する準備ができましたが、NginxにSSLを自動設定するには、Nginxの設定をいくつか確認する必要があります。
SSLを自動設定するには、CertbotがNginx設定で正しいserver
ブロックを見つけられる必要があります。 具体的には、証明書を要求するドメインと一致するserver_name
ディレクティブを探すことでこれを行います。
Nginxインストールチュートリアルのサーバーブロックのセットアップ手順に従えば、/ etc/nginx/sites-available/example.com
にドメインのサーバーブロックがあり、server_name ディレクティブが適切に設定されているはずです。``
確認するには、nano
またはお気に入りのテキストエディターを使用してドメインの設定ファイルを開きます。
- sudo nano /etc/nginx/sites-available/example.com
既存のserver_name
行を探します。次のように表示されます。
...
server_name example.com www.example.com;
...
一致する場合は、エディターを終了し、次の手順に進みます。
一致しない場合は、一致するように更新します。次に、ファイルを保存し、エディターを終了して、設定編集した構文を確認します。
- sudo nginx -t
エラーが発生した場合は、サーバーブロックファイルを再度開いて、入力ミスや文字の欠落を確認してください。設定ファイルの構文が正しければ、Nginxをリロードして新しい設定をロードします。
- sudo systemctl reload nginx
これでCertbotは正しいserver
ブロックを見つけて、自動更新できるようになりました。
次に、ファイアウォールを更新してHTTPSトラフィックを許可します。
前提条件ガイドで推奨されているように、ufw
ファイアウォールを有効にしている場合、HTTPSトラフィックを許可するように設定を調整する必要があります。幸いなことに、Nginxには、インストール時にufw
を備えたプロファイルがいくつか登録されています。
次のように入力すると、現在の設定を確認できます。
- sudo ufw status
これは次のように表示され、WebサーバーへのHTTPトラフィックのみが許可されることを意味します。
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
さらにHTTPSトラフィックを許可するには、Nginx Fullプロファイルを許可し、重複するNginx HTTPプロファイル許可を削除します。
- sudo ufw allow 'Nginx Full'
- sudo ufw delete allow 'Nginx HTTP'
ステータスは次のようになります。
- sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
次に、Certbotを実行して証明書を取得します。
Certbotは、プラグインを介してSSL証明書を取得するさまざまな方法を提供します。Nginxプラグインは、必要に応じてNginxの再設定と設定の再読み込みを処理します。このプラグインを使用するには、次を入力します。
- sudo certbot --nginx -d example.com -d www.example.com
これは、-nginx
プラグインでcertbot
を実行し、-d
を使用して証明書を有効にするドメイン名を指定します。
初めてcertbot
を実行する場合は、メールアドレスを入力し、利用規約に同意するよう求められます。これを行った後、certbot
はLet’s Encryptサーバーと通信し、チャレンジを実行して、証明書を要求しているドメインを制御していることを確認します。
それが成功すると、certbot
はHTTPS設定をどのように行うかを尋ねます。
OutputPlease choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
選択項目を選択し、ENTER
を押します。設定が更新され、Nginxがリロードして新しい設定を取得します。 certbot
は、プロセスが成功したこと、および証明書が保存されている場所を通知するメッセージを表示した後終了します。
OutputIMPORTANT 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-08-18. 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"
- 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://
を使用してウェブサイトをリロードしてみて、ブラウザのセキュリティインジケータに注目してください。通常はロックアイコンで、サイトが適切に保護されていることを示すはずです。 SSL Labs Server Testを使用してサーバーをテストすると、Aグレードになります。
最後に、更新プロセスをテストします。
Let’s Encryptの証明書は90日間のみ有効です。これは、ユーザーが証明書の更新プロセスを自動化することを奨励するためです。インストールした certbot
パッケージは、systemdタイマーを追加することでこれを処理します。 このスクリプトは1日に2回実行され、有効期限の30日以内にある証明書を自動更新します。
systemctl
を使用してタイマーのステータスを確認できます。
- sudo systemctl status certbot.timer
Output● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago
Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left
Triggers: ● certbot.service
更新プロセスをテストするには、certbot
でドライランを実行できます。
- sudo certbot renew --dry-run
エラーが表示されなければ、設定は完了です。 必要に応じて、Certbotは証明書を更新し、Nginxをリロードして変更を反映します。自動更新プロセスが失敗した場合、Let’s Encryptは指定したメールアドレスにメッセージを送信し、証明書の有効期限が近づいていることを警告します。
このチュートリアルでは、Let’s Encryptクライアント certbot
をインストールし、ドメインのSSL証明書をダウンロードし、これらの証明書を使用するようにNginxを設定し、自動証明書更新をセットアップしました。Certbotの使用についてさらに知りたい場合は、公式ドキュメントから始めるとよいでしょう。
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!