開発者ドキュメント

CentOS7でLet’sEncryptを使用してApacheを保護する方法

序章

Let’s Encrypt は、 Transport Layer Security(TLS)暗号化の無料証明書を提供する認証局(CA)であり、これによりWebサーバーで暗号化されたHTTPSを有効にします。 ほとんどの手順を自動化するソフトウェアクライアントCertbotを提供することにより、証明書の作成、検証、署名、インストール、および更新のプロセスを簡素化します。

このチュートリアルでは、Certbotを使用して、ApacheをWebサーバーとして実行しているCentOS7サーバーでLet’sEncryptからTLS/SSL証明書を設定します。 さらに、cronジョブを使用して証明書の更新プロセスを自動化します。これについては、Cronを使用してVPSでタスクを自動化する方法を参照してください。

前提条件

このガイドを完了するには、次のものが必要です。

これらの前提条件をすべて完了したら、Let’sEncryptクライアントソフトウェアのインストールに進みます。

ステップ1— CertbotLet’sEncryptクライアントのインストール

Let’s Encryptを使用してSSL証明書を取得するには、最初にCertbotと mod_ssl 、SSLv3暗号化のサポートを提供するApacheモジュールをインストールする必要があります。

The certbot パッケージは、デフォルトではパッケージマネージャーからは利用できません。 Certbotをインストールするには、EPELリポジトリを有効にする必要があります。

CentOS 7 EPELリポジトリを追加するには、次のコマンドを実行します。

  1. sudo yum install epel-release

リポジトリにアクセスできるようになったので、必要なすべてのパッケージをインストールします。

  1. sudo yum install certbot python2-certbot-apache mod_ssl

インストールプロセス中に、GPGキーのインポートについて尋ねられます。 このキーは、インストールするパッケージの信頼性を確認します。 インストールを完了するには、次のように入力してGPGキーを受け入れます y と押す ENTER そうするように促されたとき。

これらのサービスをインストールすると、Certbotを実行して証明書を取得する準備が整います。

ステップ2—証明書を取得する

Certbotがインストールされたので、それを使用してドメインのSSL証明書を要求できます。

を使用して certbot クライアントを暗号化してApacheのSSL証明書を生成して、プロセスの多くのステップを自動化しましょう。 クライアントは、パラメータとして指定したドメインに有効な新しいSSL証明書を自動的に取得してインストールします。

インタラクティブインストールを実行し、単一のドメインのみをカバーする証明書を取得するには、 certbot 次のコマンド:

  1. sudo certbot --apache -d example.com

これは実行されます certbot とともに --apache プラグインを使用して、証明書を構成するドメインを指定します。 -d 国旗。

複数のドメインまたはサブドメインに有効な単一の証明書をインストールする場合は、それらを追加のパラメーターとしてコマンドに渡し、新しい各ドメインまたはサブドメインにタグを付けることができます。 -d 国旗。 パラメータリストの最初のドメイン名は、Let’sEncryptが証明書を作成するために使用するbaseドメインになります。 このため、リストの最初にベースドメイン名を渡し、その後に追加のサブドメインまたはエイリアスを渡します。

  1. sudo certbot --apache -d example.com -d www.example.com

この例のベースドメインは example.com.

The certbot ユーティリティは、証明書の要求手順中にドメイン情報の入力を求めることもできます。 この機能を使用するには、 certbot ドメインなし:

  1. sudo certbot --apache

プログラムは、証明書オプションをカスタマイズするためのステップバイステップガイドを提供します。 紛失したキーの回復と通知用の電子メールアドレスを提供するように求められ、次に利用規約に同意するように求められます。 コマンドラインでドメインを指定しなかった場合は、その入力も求められます。 仮想ホストファイルでドメインが指定されていない場合は、 ServerName ディレクティブでは、仮想ホストファイルを選択するように求められます。 ほとんどの場合、デフォルト ssl.conf ファイルは動作します。

両方を有効にするかどうかを選択することもできます httphttps すべてのリクエストにアクセスするか、リダイレクトを強制します https. セキュリティを強化するために、オプションを選択することをお勧めします 2: Redirect 暗号化されていない接続を許可する特別な必要がない場合。 選択してからヒット ENTER.

Output
Please 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):2

インストールが正常に完了すると、次のようなメッセージが表示されます。

Output
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 2019-08-14. 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 ディレクトリ。

証明書がダウンロード、インストール、およびロードされたので、SSL証明書のステータスをチェックして、すべてが機能していることを確認できます。

ステップ3—証明書のステータスを確認する

この時点で、クラウドセキュリティ会社 QualysSSLサーバーテストを使用して、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日間有効ですが、エラーの許容範囲を確保するために、60日ごとに証明書を更新することをお勧めします。 このため、このプロセスを自動化して、証明書を定期的にチェックおよび更新することをお勧めします。

まず、証明書を更新するために使用するコマンドを調べてみましょう。 The certbot Let’sEncryptクライアントには renew 現在インストールされている証明書を自動的にチェックし、有効期限から30日以内の場合は更新を試みるコマンド。 を使用して --dry-run オプションで、このタスクのシミュレーションを実行して、方法をテストできます。 renew 作品:

  1. sudo certbot renew --dry-run

出力は次のようになります。

Output
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 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ジョブを作成することです。 更新は最初に有効期限をチェックし、証明書の有効期限が30日以内の場合にのみ更新を実行するため、毎週または毎日実行するcronジョブを作成しても安全です。

公式のCertbotドキュメントは実行することを推奨しています cron 1日2回。 これにより、Let’s Encryptが証明書の失効を開始した場合、Certbotが証明書を更新するまでに半日以内になります。

編集します crontab 1日に2回更新を実行する新しいジョブを作成します。 編集するには crontab root ユーザーの場合、次を実行します。

  1. sudo crontab -e

テキストエディタがデフォルトを開きます crontab これは、この時点では空のテキストファイルです。 このチュートリアルでは、viテキストエディタを使用します。 このテキストエディタとその後継のvimの詳細については、クラウドサーバーへのVimテキストエディタのインストールと使用チュートリアルをご覧ください。

を押して挿入モードに入ります i 次の行を追加します。

crontab
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew

終了したら、を押します ESC 挿入モードを終了するには、 :wqENTER ファイルを保存して終了します。 これにより、毎日正午と深夜に実行される新しいcronジョブが作成されます。 cronジョブにランダム性の要素を追加すると、1時間ごとのジョブがすべて同じ分に発生しないようになり、サーバーの急増が発生します。 python -c 'import random; import time; time.sleep(random.random() * 3600)' 更新タスクのために1時間以内にランダムな分を選択します。

cronジョブを作成およびスケジュールする方法の詳細については、VPSガイドでCronを使用してタスクを自動化する方法を確認してください。 更新の詳細については、Certbotのドキュメントを参照してください。

結論

このガイドでは、Let’s Encrypt Certbotクライアントをインストールし、ドメインのSSL証明書をダウンロードし、証明書の自動更新を設定しました。 Certbotの使用について質問がある場合は、Certbotの公式ドキュメントを確認してください。 また、公式の Let’s Encryptブログで、重要な更新を随時確認することをお勧めします。

モバイルバージョンを終了