序章
Let’s Encrypt は、 Transport Layer Security(TLS)暗号化の無料の証明書を提供する認証局(CA)です。 ソフトウェアクライアントCertbotを提供することにより、証明書の作成、検証、署名、インストール、および更新のプロセスを簡素化します。
このチュートリアルでは、NginxをWebサーバーとして実行しているCentOS8サーバーでLet’sEncryptからTLS/SSL証明書を設定します。 さらに、cronジョブを使用して証明書の更新プロセスを自動化します。
前提条件
このガイドを完了するには、次のものが必要です。
- CentOS8初期サーバーセットアップガイドに従ってセットアップされた1台のCentOS8サーバー。
sudo
特権とファイアウォール。 - サーバーブロックが構成されたCentOS8サーバーにインストールされたNginx。 チュートリアルCentOS8にNginxをインストールする方法に従ってこれを設定する方法を学ぶことができます。
- 完全に登録されたドメイン名。 このチュートリアルでは、
your_domain
全体の例として。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。 - 次の両方のDNSレコードがサーバー用に設定されています。 それらを追加する方法の詳細については、このDigitalOceanDNSの紹介に従ってください。
- とのAレコード
your_domain
サーバーのパブリックIPアドレスを指します。 - とのAレコード
www.your_domain
サーバーのパブリックIPアドレスを指します。
- とのAレコード
ステップ1— CertbotLet’sEncryptクライアントのインストール
まず、をインストールする必要があります certbot
ソフトウェアパッケージ。 root以外のユーザーとしてCentOS8マシンにログインします。
- ssh sammy@your_server_ip
The certbot
パッケージは、デフォルトではパッケージマネージャーからは利用できません。 Certbotをインストールするには、EPELリポジトリを有効にする必要があります。
CentOS 8 EPELリポジトリを追加するには、次のコマンドを実行します。
- sudo dnf install epel-release
インストールの確認を求められたら、入力して入力します y
.
追加のリポジトリにアクセスできるようになったので、必要なすべてのパッケージをインストールします。
- sudo dnf install certbot python3-certbot-nginx
これにより、Certbot自体と、プログラムの実行に必要なCertbot用のNginxプラグインがインストールされます。
インストールプロセスでは、GPGキーのインポートについて尋ねられます。 インストールが完了するように確認してください。
これでLet’sEncryptクライアントがインストールされましたが、証明書を取得する前に、必要なすべてのポートが開いていることを確認する必要があります。 これを行うには、次の手順でファイアウォール設定を更新します。
ステップ2—ファイアウォールルールを更新する
前提条件の設定により firewalld
、Nginx Webサーバーで外部接続を許可するには、ファイアウォール設定を調整する必要があります。
すでに有効になっているサービスを確認するには、次のコマンドを実行します。
- sudo firewall-cmd --permanent --list-all
次のような出力が表示されます。
Outputpublic
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client http ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
見えない場合 http
サービスリストで、次を実行して有効にします。
- sudo firewall-cmd --permanent --add-service=http
許可するには https
トラフィック、次のコマンドを実行します。
- sudo firewall-cmd --permanent --add-service=https
変更を適用するには、ファイアウォールサービスをリロードする必要があります。
- sudo firewall-cmd --reload
これで、サーバーを次のように開きました。 https
トラフィックがあれば、Certbotを実行して証明書を取得する準備が整います。
ステップ3—証明書を取得する
これで、ドメインのSSL証明書をリクエストできます。
を使用してNginxのSSL証明書を生成する場合 certbot
Let’s Encryptクライアント。クライアントは、パラメータとして提供されたドメインに有効な新しいSSL証明書を自動的に取得してインストールします。
複数のドメインまたはサブドメインに有効な単一の証明書をインストールする場合は、それらを追加のパラメーターとしてコマンドに渡すことができます。 パラメータリストの最初のドメイン名は、Let’sEncryptが証明書の作成に使用するbase ドメインになります。そのため、リストの最初にトップレベルドメイン名を渡し、その後にトップレベルドメイン名を渡します。追加のサブドメインまたはエイリアス:
- sudo certbot --nginx -d your_domain -d www.your_domain
これは実行されます certbot
とともに --nginx
プラグイン、およびベースドメインは your_domain
. インタラクティブインストールを実行し、単一のドメインのみをカバーする証明書を取得するには、 certbot
次のコマンド:
- sudo certbot --nginx -d your_domain
The certbot
ユーティリティは、証明書の要求手順中にドメイン情報の入力を求めることもできます。 この機能を使用するには、 certbot
ドメインなし:
- sudo certbot --nginx
証明書オプションをカスタマイズするためのステップバイステップガイドを受け取ります。 Certbotは、紛失したキーの回復と通知のための電子メールアドレスを提供し、利用規約に同意するように求めます。 コマンドラインでドメインを指定しなかった場合、Certbotは server_name
ディレクティブであり、見つかったドメイン名のリストが表示されます。 サーバーブロックファイルでドメインが指定されていない場合は、 server_name
ディレクティブの場合、Certbotはドメイン名を手動で提供するように要求します。
セキュリティを強化するために、Certbotはポート上のすべてのトラフィックのリダイレクトを自動的に構成します 80
に 443
.
インストールが正常に完了すると、次のようなメッセージが表示されます。
OutputIMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your_domain/privkey.pem
Your cert will expire on 2021-02-26. 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
生成された証明書ファイルは、ベースドメインにちなんで名付けられたサブディレクトリ内で利用できます。 /etc/letsencrypt/live
ディレクトリ。
Certbotの使用が終了したので、SSL証明書のステータスを確認できます。 ご希望のウェブブラウザで次のリンクを開いて、SSL証明書のステータスを確認してください( your_domain をベースドメインに置き換えることを忘れないでください)。
https://www.ssllabs.com/ssltest/analyze.html?d=your_domain
このサイトには、 SSLLabsからのSSLテストが含まれています。これは自動的に開始されます。 この記事の執筆時点では、デフォルト設定でAの評価が付けられています。
これで、を使用してWebサイトにアクセスできます。 https
プレフィックス。 ただし、この設定を機能させるには、証明書を定期的に更新する必要があります。 次のステップでは、この更新プロセスを自動化します。
ステップ4—自動更新の設定
Let’s Encryptの証明書は90日間有効ですが、許容誤差を考慮して、60日ごとに証明書を更新することをお勧めします。 CertbotLet’sEncryptクライアントには renew
現在インストールされている証明書を自動的にチェックし、有効期限から30日以内の場合は更新を試みるコマンド。
次のコマンドを実行して、証明書の自動更新をテストできます。
- sudo certbot renew --dry-run
出力は次のようになります。
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/your_domain.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 monitoring.pp.ua
Waiting for verification...
Cleaning up challenges
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/your_domain/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/your_domain/fullchain.pem (success)
...
複数のドメインでバンドルされた証明書を作成した場合、ベースドメイン名のみが出力に表示されますが、更新はこの証明書に含まれるすべてのドメインに対して機能することに注意してください。
証明書が古くならないようにするための実用的な方法は、自動更新コマンドを定期的に実行するcronジョブを作成することです。 更新は最初に有効期限をチェックし、証明書の有効期限が30日以内の場合にのみ更新を実行するため、毎週、または毎日実行するcronジョブを作成しても安全です。
crontabを編集して、更新を1日2回実行する新しいジョブを作成します。 rootユーザーのcrontabを編集するには、次のコマンドを実行します。
- sudo crontab -e
テキストエディタはデフォルトのcrontabを開きます。これは、この時点では空のテキストファイルです。 を押して挿入モードに入ります i
次の行を追加します。
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew --quiet
終了したら、を押します ESC
挿入モードを終了するには、 :wq
と ENTER
ファイルを保存して終了します。 テキストエディタViとその後継のVimの詳細については、クラウドサーバーへのVimテキストエディタのインストールと使用チュートリアルをご覧ください。
これにより、毎日正午と深夜に実行される新しいcronジョブが作成されます。 python -c 'import random; import time; time.sleep(random.random() * 3600)'
更新タスクのために1時間以内にランダムな分を選択します。
The renew
Certbotのコマンドは、システムにインストールされているすべての証明書をチェックし、30日以内に期限切れになるように設定されている証明書を更新します。 --quiet
情報を出力したり、ユーザー入力を待機したりしないようにCertbotに指示します。
更新の詳細については、Certbotのドキュメントを参照してください。
結論
このガイドでは、Let’s EncryptクライアントのCertbotをインストールし、ドメインのSSL証明書をダウンロードして、証明書の自動更新を設定しました。 Certbotの使用について質問がある場合は、Certbotの公式ドキュメントを確認してください。
また、公式の Let’s Encryptブログで、重要な更新を随時確認することもできます。