序章
Let’s Encrypt は、 Transport Layer Security(TLS)暗号化の無料証明書を提供する認証局(CA)であり、これによりWebサーバーで暗号化されたHTTPSを有効にします。 ほとんどの手順を自動化するソフトウェアクライアントCertbotを提供することにより、証明書の作成、検証、署名、インストール、および更新のプロセスを簡素化します。
このチュートリアルでは、Certbotを使用して、ApacheをWebサーバーとして実行しているCentOS7サーバーでLet’sEncryptからTLS/SSL証明書を設定します。 さらに、cronジョブを使用して証明書の更新プロセスを自動化します。これについては、Cronを使用してVPSでタスクを自動化する方法を参照してください。
前提条件
このガイドを完了するには、次のものが必要です。
- CentOS7初期サーバーセットアップガイドに従ってセットアップされた1台のCentOS7サーバーとroot以外のユーザー
sudo
特権。 - 新しいCentOS7サーバーの追加の推奨手順ガイドに従って構成された基本的なファイアウォール。
- 仮想ホストが構成されたCentOS7サーバーにインストールされたApache。 これを設定する方法については、チュートリアル CentOS7にApacheWebサーバーをインストールする方法に従ってください。 ドメインに仮想ホストファイルがあることを確認してください。 このチュートリアルでは、
/etc/httpd/sites-available/example.com.conf
例として。 - 証明書を使用する登録済みドメイン名を所有または管理する必要があります。 ドメイン名をまだ登録していない場合は、 Namecheap で購入するか、 Freenom で無料で入手するか、選択したドメイン登録事業者を使用できます。
- ドメインがサーバーのパブリックIPアドレスを指すDNSARecord。 DigitalOceanプラットフォームでDNSを追加する方法の詳細については、このDigitalOceanDNSの概要をフォローしてください。 Let’s Encryptが証明書を発行しているドメインを所有していることを検証する方法のため、DNSAレコードが必要です。 たとえば、次の証明書を取得する場合
example.com
、検証プロセスが機能するには、そのドメインがサーバーに解決される必要があります。 私たちのセットアップは使用しますexample.com
とwww.example.com
ドメイン名として、どちらも有効なDNSレコードが必要です。
これらの前提条件をすべて完了したら、Let’sEncryptクライアントソフトウェアのインストールに進みます。
ステップ1— CertbotLet’sEncryptクライアントのインストール
Let’s Encryptを使用してSSL証明書を取得するには、最初にCertbotと mod_ssl 、SSLv3暗号化のサポートを提供するApacheモジュールをインストールする必要があります。
The certbot
パッケージは、デフォルトではパッケージマネージャーからは利用できません。 Certbotをインストールするには、EPELリポジトリを有効にする必要があります。
CentOS 7 EPELリポジトリを追加するには、次のコマンドを実行します。
- sudo yum install epel-release
リポジトリにアクセスできるようになったので、必要なすべてのパッケージをインストールします。
- sudo yum install certbot python2-certbot-apache mod_ssl
インストールプロセス中に、GPGキーのインポートについて尋ねられます。 このキーは、インストールするパッケージの信頼性を確認します。 インストールを完了するには、次のように入力してGPGキーを受け入れます y
と押す ENTER
そうするように促されたとき。
これらのサービスをインストールすると、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
ユーティリティは、証明書の要求手順中にドメイン情報の入力を求めることもできます。 この機能を使用するには、 certbot
ドメインなし:
- sudo certbot --apache
プログラムは、証明書オプションをカスタマイズするためのステップバイステップガイドを提供します。 紛失したキーの回復と通知用の電子メールアドレスを提供するように求められ、次に利用規約に同意するように求められます。 コマンドラインでドメインを指定しなかった場合は、その入力も求められます。 仮想ホストファイルでドメインが指定されていない場合は、 ServerName
ディレクティブでは、仮想ホストファイルを選択するように求められます。 ほとんどの場合、デフォルト ssl.conf
ファイルは動作します。
両方を有効にするかどうかを選択することもできます http
と https
すべてのリクエストにアクセスするか、リダイレクトを強制します https
. セキュリティを強化するために、オプションを選択することをお勧めします 2: Redirect
暗号化されていない接続を許可する特別な必要がない場合。 選択してからヒット ENTER
.
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):2
インストールが正常に完了すると、次のようなメッセージが表示されます。
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 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—証明書のステータスを確認する
この時点で、クラウドセキュリティ会社 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日間有効ですが、エラーの許容範囲を確保するために、60日ごとに証明書を更新することをお勧めします。 このため、このプロセスを自動化して、証明書を定期的にチェックおよび更新することをお勧めします。
まず、証明書を更新するために使用するコマンドを調べてみましょう。 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ジョブを作成することです。 更新は最初に有効期限をチェックし、証明書の有効期限が30日以内の場合にのみ更新を実行するため、毎週または毎日実行するcronジョブを作成しても安全です。
公式のCertbotドキュメントは実行することを推奨しています cron
1日2回。 これにより、Let’s Encryptが証明書の失効を開始した場合、Certbotが証明書を更新するまでに半日以内になります。
編集します crontab
1日に2回更新を実行する新しいジョブを作成します。 編集するには crontab
root ユーザーの場合、次を実行します。
- sudo crontab -e
テキストエディタがデフォルトを開きます crontab
これは、この時点では空のテキストファイルです。 このチュートリアルでは、viテキストエディタを使用します。 このテキストエディタとその後継のvimの詳細については、クラウドサーバーへのVimテキストエディタのインストールと使用チュートリアルをご覧ください。
を押して挿入モードに入ります i
次の行を追加します。
crontab0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew
終了したら、を押します ESC
挿入モードを終了するには、 :wq
と ENTER
ファイルを保存して終了します。 これにより、毎日正午と深夜に実行される新しい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ブログで、重要な更新を随時確認することをお勧めします。