序章
Let’s Encryptは、無料の TLS / SSL証明書の取得とインストールを容易にする認証局(CA)であり、これによりWebサーバーで暗号化されたHTTPSを有効にします。 Certbot などのクライアントと連携してプロセスを簡素化し、必要な手順を自動化します。
このチュートリアルでは、Certbotを使用して、CentOS8上のApacheWebサーバーでTLS/SSL証明書を設定します。 さらに、cronジョブを使用して証明書の更新プロセスを自動化します。これについては、Cronを使用してCentOS8でタスクを自動化する方法を参照してください。
前提条件
このガイドを完了するには、次のものが必要です。
- root以外のsudo対応ユーザーと基本的なCentOS8サーバー
firewalld
CentOS8初期サーバーセットアップガイドに従ってファイアウォールをセットアップします。 - ドメイン用に構成された仮想ホストを使用してサーバーにインストールされたApache。 これを設定する方法については、チュートリアル CentOS8にApacheWebサーバーをインストールする方法を参照してください。 ドメインに仮想ホストが設定されていることを確認してください。 このチュートリアルでは、
/etc/httpd/sites-available/example.com.conf
例として。 - 証明書を使用する登録済みドメイン名を所有または管理する必要があります。 ドメイン名をまだ登録していない場合は、 Namecheap で購入するか、 Freenom で無料で入手するか、選択したドメイン登録事業者を使用できます。
- ドメインがサーバーのパブリックIPアドレスを指すDNSARecord。 DigitalOceanを介してドメインをホストしている場合、DigitalOceanプラットフォームでこれらのレコードを追加する方法の詳細については、DigitalOceanDNSドキュメントを参照してください。 DNS
A
Let’s Encryptが証明書を発行しているドメインを所有していることを検証する方法のために、レコードが必要です。 たとえば、次の証明書を取得する場合example.com
、検証プロセスが機能するには、そのドメインがサーバーに解決される必要があります。 私たちのセットアップは使用しますexample.com
とwww.example.com
ドメイン名として、どちらも有効なDNSレコードが必要です。
これらの前提条件をすべて完了したら、Certbotクライアントソフトウェアのインストールに進みます。
ステップ1— CertbotLet’sEncryptクライアントのインストール
Let’s Encryptを使用してSSL証明書を取得するには、最初にCertbotと mod_ssl 、SSLv3暗号化のサポートを提供するApacheモジュールをインストールする必要があります。
The certbot
パッケージは、デフォルトではパッケージマネージャーからは利用できません。 Certbotをインストールするには、EPELリポジトリを有効にする必要があります。
CentOS 8 EPELリポジトリを追加するには、次のコマンドを実行します。
- sudo dnf install epel-release
リポジトリにアクセスできるようになったので、必要なすべてのパッケージをインストールします。
- sudo dnf install certbot python3-certbot-apache mod_ssl
これらのサービスをインストールすると、Certbotを実行して証明書を取得する準備が整います。
ステップ2—証明書を取得する
Certbotがインストールされたので、それを使用してドメインのSSL証明書を要求できます。
を使用して certbot
クライアントを暗号化してApacheのSSL証明書を生成して、プロセスの多くのステップを自動化しましょう。 クライアントは、パラメータとして指定したドメインに有効な新しいSSL証明書を自動的に取得してインストールします。
インタラクティブインストールを実行し、単一のドメインのみをカバーする証明書を取得するには、 certbot
次のコマンド:
- sudo certbot --apache -d example.com
これは実行されます certbot
とともに --apache
プラグインを使用して、証明書を構成するドメインを指定します。 -d
国旗。
複数のドメインまたはサブドメインに有効な単一の証明書をインストールする場合は、それらを追加のパラメーターとしてコマンドに渡し、新しい各ドメインまたはサブドメインにタグを付けることができます。 -d
国旗。 パラメータリストの最初のドメイン名は、Let’sEncryptが証明書を作成するために使用するbaseドメインになります。 このため、リストの最初にベースドメイン名を渡し、その後に追加のサブドメインまたはエイリアスを渡します。
- sudo certbot --apache -d example.com -d www.example.com
この例のベースドメインは example.com
.
The certbot
ユーティリティは、既存のApache構成に基づいてドメインを選択するように求めることもできます。 この機能を使用するには、 certbot
ドメインが指定されていない場合:
- sudo certbot --apache
プログラムは、証明書オプションをカスタマイズするためのステップバイステップガイドを提供します。 紛失したキーの回復と通知用の電子メールアドレスを提供するように求められ、次に利用規約に同意するように求められます。 コマンドラインでドメインを指定しなかった場合は、その入力も求められます。 仮想ホストファイルでドメインが指定されていない場合は、 ServerName
ディレクティブでは、仮想ホストファイルを選択するように求められます。
インストールが正常に完了すると、次のようなメッセージが表示されます。
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-09-24. 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
生成された証明書ファイルは、ベースドメインにちなんで名付けられたサブディレクトリ内で利用できます。 /etc/letsencrypt/live
ディレクトリ。
証明書がダウンロード、インストール、およびロードされたので、SSL証明書のステータスをチェックして、すべてが機能していることを確認できます。
ステップ3—証明書とSSL構成をテストする
この時点で、クラウドセキュリティ会社 QualysのSSLサーバーテストを使用して、CertbotがSSL証明書を正しく作成したことを確認できます。
お好みのウェブブラウザで次のリンクを開き、置き換えます example.com
あなたのドメインで:
https://www.ssllabs.com/ssltest/analyze.html?d=example.com
サーバーへのSSL接続のテストをすぐに開始するページが表示されます。
テストの実行が開始されると、完了するまでに数分かかる場合があります。 テストのステータスはブラウザで更新されます。
テストが終了すると、サーバーの構成のセキュリティと品質を評価するレターグレードがページに表示されます。 この記事の執筆時点では、デフォルト設定はAの評価を与えます。
SSL Labsがこれらの評価を決定する方法の詳細については、 SSL Labsの評価投稿で、2018年1月に評価スキームに加えられた更新の詳細を確認してください。
を使用してWebサイトをリロードしてみてください https://
ブラウザのセキュリティインジケータに注目してください。 これで、サイトが適切に保護されていることが示され、通常は鍵のアイコンが表示されます。
SSL証明書をインストールして検証したら、次のステップは、証明書の自動更新を設定して、証明書を有効に保つことです。
ステップ4—自動更新の設定
Let’s Encryptの証明書は90日間有効ですが、失効やその他の問題が発生した場合に備えて、更新を1日2回確認することをお勧めします。 このため、このプロセスを自動化することがベストプラクティスです。
まず、証明書を更新するために使用するコマンドを調べてみましょう。 The certbot
Let’sEncryptクライアントには renew
現在インストールされている証明書を自動的にチェックし、有効期限から30日以内の場合は更新を試みるコマンド。 を使用して --dry-run
オプションで、このタスクのシミュレーションを実行して、方法をテストできます。 renew
作品:
- sudo certbot renew --dry-run
出力は次のようになります。
OutputSaving 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 apache, Installer apache
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for example.com
http-01 challenge for www.example.com
Waiting for verification...
Cleaning up challenges
Resetting dropped connection: acme-staging-v02.api.letsencrypt.org
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of apache 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)
...
複数のドメインでバンドルされた証明書を作成した場合、ベースドメイン名のみが出力に表示されますが、更新はこの証明書に含まれるすべてのドメインに対して有効であることに注意してください。
証明書が古くならないようにするための実用的な方法は、自動更新コマンドを定期的に実行するcronジョブを作成することです。
公式のCertbotドキュメントは実行することを推奨しています cron
1日2回。 これにより、Let’s Encryptが証明書の失効を開始した場合、Certbotが証明書を更新するまでに半日以内になります。 ドキュメントでは、次のコマンドを使用して適切なコマンドを追加することを提案しています cron
に仕事 /etc/crontab
crontabファイル:
- echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
これにより、毎日正午と深夜に実行される新しいcronジョブが作成されます(0 0,12 * * *
). その後、ショートを実行します python3
スクリプト。0〜60分のランダムな期間一時停止します。 Let’s Encryptのサーバーの負荷を軽減するために、これをお勧めします。
Pythonスクリプトが終了した後、実際の certbot renew
コマンドが実行されます。
cronジョブを作成およびスケジュールする方法の詳細については、Cronを使用してCentOS8でタスクを自動化する方法ガイドを確認してください。 更新の詳細については、Certbotのドキュメントを参照してください。
結論
このガイドでは、Let’s Encrypt Certbotクライアントをインストールし、ドメインのSSL証明書をダウンロードし、証明書の自動更新を設定しました。 Certbotの使用について質問がある場合は、Certbotの公式ドキュメントを確認してください。 また、公式の Let’s Encryptブログで、重要な更新を随時確認することをお勧めします。