序章
Let’s Encryptは、無料の TLS / SSL証明書を取得してインストールする方法を提供する認証局(CA)であり、これによりWebサーバーで暗号化されたHTTPSを有効にします。 必要な手順のほとんど(すべてではないにしても)を自動化しようとするソフトウェアクライアント Certbot を提供することにより、プロセスを合理化します。 現在、証明書の取得とインストールのプロセス全体は、ApacheとNginxの両方で完全に自動化されています。
このチュートリアルでは、Certbotを使用してUbuntu 18.04でApache用の無料のSSL証明書を取得し、証明書が自動的に更新されるように設定されていることを確認します。
このチュートリアルでは、Let’s Encryptによって保護されるWebサイトをセットアップするために、デフォルトの構成ファイルの代わりに別のApache仮想ホストファイルを使用します。 サーバーでホストされているドメインごとに新しいApache仮想ホストファイルを作成することをお勧めします。これは、よくある間違いを回避し、フォールバック設定としてデフォルトファイルを維持するのに役立ちます。
前提条件
このチュートリアルを完了するには、次のものが必要です。
-
このUbuntu18.04チュートリアルの初期サーバーセットアップに従ってセットアップされた1つのUbuntu18.04サーバー。これには、sudo非rootユーザーとファイアウォールが含まれます。
-
完全に登録されたドメイン名。 このチュートリアルでは、全体を通して例としてyour_domainを使用します。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。
-
次の両方のDNSレコードがサーバー用に設定されています。 それらを追加する方法の詳細については、このDigitalOceanDNSの紹介に従ってください。
- とのAレコード
your_domain
サーバーのパブリックIPアドレスを指します。 - とのAレコード
www.your_domain
サーバーのパブリックIPアドレスを指します。
- とのAレコード
-
Ubuntu18.04にApacheをインストールする方法に従ってApacheをインストールします。 ドメインに仮想ホストファイルがあることを確認してください。 このチュートリアルでは、
/etc/apache2/sites-available/your_domain.conf
例として。
ステップ1—Certbotをインストールする
Let’s EncryptでSSL証明書を取得するには、サーバーにCertbotソフトウェアをインストールする必要があります。 このチュートリアルでは、デフォルトのUbuntuパッケージリポジトリを使用してCertbotをインストールします。
次のコマンドを実行すると、2つのパッケージがインストールされます。 certbot
と python3-certbot-apache
. 後者はCertbotとApacheを統合するプラグインであるため、1つのコマンドで証明書の取得とWebサーバー内のHTTPSの構成を自動化できます。
- sudo apt install certbot python3-certbot-apache
を押してインストールを確認します Y
その後 ENTER
受け入れるために。
これで、Certbotがサーバーにインストールされました。 次に、Apacheの構成を確認して、仮想ホストが適切に設定されていることを確認します。 これにより、 certbot
クライアントスクリプトは、ドメインを検出し、新しく生成されたSSL証明書を自動的に使用するようにWebサーバーを再構成できます。
ステップ2—Apache仮想ホスト構成の確認
WebサーバーのSSLを自動的に取得して構成するには、CertbotがApache構成ファイルで正しい仮想ホストを見つけられる必要があります。 サーバードメイン名は、 ServerName
と ServerAlias
で定義されたディレクティブ VirtualHost
構成ブロック。
Apacheインストールチュートリアルの仮想ホストのセットアップ手順に従った場合は、ドメインのVirtualHostブロックが次の場所にあるはずです。 /etc/apache2/sites-available/your_domain.conf
とともに ServerName
ディレクティブはすでに適切に設定されています。
確認するには、を使用してドメインの仮想ホストファイルを開きます nano
またはお気に入りのテキストエディタ:
- sudo nano /etc/apache2/sites-available/your_domain.conf
既存のものを探す ServerName
と ServerAlias
行:
...
ServerName your_domain;
SeverAlias www.your_domain
...
もしあなたの ServerName
と ServerAlias
がすでに設定されている場合は、テキストエディタを終了して、次の手順に進むことができます。 使用している場合 nano
あなたはを押すことによってこれを行うことができます CTRL + X
それから Y
と ENTER
.
現在の仮想ホスト構成が一致しない場合は、それに応じて更新してください。 その後、テキストエディタを保存して終了します。 次に、変更を検証します。
- sudo apache2ctl configtest
仮想ホストファイルの構文にエラーがない場合は、 Syntax OK
応答。 エラーが発生した場合は、仮想ホストファイルを再度開き、タイプミスや文字の欠落がないか確認してください。 構成ファイルの構文が正しい場合は、Apacheをリロードして新しい構成をロードします。
- sudo systemctl reload apache2
これらの変更が有効になると、Certbotは正しいVirtualHostブロックを見つけて更新できるようになります。
次に、HTTPSトラフィックを許可するようにファイアウォールを更新します。
ステップ3—ファイアウォールを介したHTTPSの許可
前提条件ガイドで推奨されているように、UFWファイアウォールを有効にしている場合は、HTTPSトラフィックを許可するように設定を調整する必要があります。 ApacheはいくつかのUFWアプリケーションプロファイルを登録し、 Apache Full プロファイルを利用して、サーバーでHTTPトラフィックとHTTPSトラフィックの両方を許可できます。
次のコマンドを実行して、サーバーで現在許可されているトラフィックの種類を確認します。
- sudo ufw status
Apacheインストールガイドのいずれかに従った場合、出力は次のように生成されます。これは、ポート上のHTTPトラフィックのみを意味します。 80
許可されています:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
HTTPSトラフィックを追加で取り込むには、 Apache Full
プロフィール:
- sudo ufw allow 'Apache Full'
次に、冗長なものを削除します Apache
プロファイル許容値:
- sudo ufw delete allow 'Apache'
ステータスをもう一度確認します。
- sudo ufw status
次の出力が表示されます。
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)
これで、Certbotを実行して証明書を取得する準備が整いました。
ステップ4—SSL証明書を取得する
Certbotは、プラグインを介してSSL証明書を取得するためのさまざまな方法を提供します。 Apacheプラグインは、Apacheの再構成と、必要に応じて構成の再ロードを処理します。 このプラグインを使用するには、次を実行します。
- sudo certbot --apache
このコマンドは、SSL証明書を構成するための一連の質問を含むプロンプトを生成します。 まず、有効な電子メールアドレスを入力するように求められます。これは、更新通知とセキュリティ通知を目的としています。
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): you@your_domain
有効なメールアドレスを入力したら、を押します ENTER
次のステップに進みます。 Let’sEncryptの利用規約に同意するかどうかを確認するよう求められます。 を押して確認 A
と ENTER
:
OutputPlease read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A
次に、ニュースやその他の情報を受け取るために、電子メールを電子フロンティア財団と共有するかどうかを尋ねられます。 購読したくない場合は、 N
、それ以外の場合はを押します Y
その後 ENTER
次のステップに進むには:
OutputWould you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
プロンプトは、HTTPSをアクティブ化するドメインについてCertbotに通知します。 ドメイン名のリストは、Apache仮想ホスト構成から自動的に取得されます。 これが、あなたが正しいことを確認することが重要だった理由です ServerName
と ServerAlias
仮想ホストで構成された設定。 リストされているすべてのドメイン名に対してHTTPSを有効にする場合(推奨)、プロンプトを空白のままにして、を押します。 ENTER
続行します。 それ以外の場合は、コンマやスペースで区切って適切な番号をそれぞれリストすることにより、HTTPSを有効にするドメインを選択し、を押します。 ENTER
:
OutputWhich names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: your_domain
2: your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
次の出力が表示されます。
OutputObtaining a new certificate
Performing the following challenges:
http-01 challenge for your_domain
http-01 challenge for your_domain
Enabled Apache rewrite module
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
次に、HTTPトラフィックをHTTPSに転送するかどうかを選択するように求められます。 これは、誰かが暗号化されていないチャネル(HTTP)を介してWebサイトにアクセスすると、WebサイトのHTTPSアドレスに自動的にリダイレクトされることを意味します。 選ぶ 2
リダイレクトを有効にするには、または 1
Webサイトにアクセスするための別々の方法としてHTTPと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): 2
応答を入力すると、Certbotの構成が完了します。 新しい証明書、生成されたファイルの場所、および証明書の信頼性を分析するために外部ツールを使用して構成をテストする方法についての最終的なコメントを受け取ります。
OutputCongratulations! You have successfully enabled https://your_domain
and your_domain
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=your_domain
https://www.ssllabs.com/ssltest/analyze.html?d=your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT 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 2022-03-07. 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
証明書がダウンロードされ、インストールされ、Apacheの構成にロードされます。 を使用してWebサイトをリロードしてみてください https://
ブラウザのセキュリティインジケータに注目してください。 通常、アドレスバーに鍵のアイコンが表示され、サイトが適切に保護されていることを示す必要があります。
SSL Labsサーバーテストを使用して、証明書のグレードを確認し、外部サービスの観点から証明書に関する詳細情報を取得できます。
次のステップでは、Certbotの自動更新機能をテストします。これにより、有効期限が切れる前に証明書が自動更新されることが保証されます。
ステップ5—Certbotの自動更新を確認する
Let’s Encryptの証明書は、90日間のみ有効です。 これは、ユーザーが証明書の更新プロセスを自動化し、誤用された証明書や盗まれたキーが遅かれ早かれ期限切れになるようにすることを奨励するためです。
The certbot
インストールしたパッケージは、更新スクリプトを含めることで更新を処理します。 /etc/cron.d
、によって管理されています systemctl
と呼ばれるサービス certbot.timer
. このスクリプトは1日2回実行され、有効期限が切れてから30日以内の証明書は自動的に更新されます。
このサービスのステータスをチェックし、アクティブで実行中であることを確認してください。
- sudo systemctl status certbot.timer
次のような出力が表示されます。
Output● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: en
Active: active (waiting) since Tue 2021-12-07 20:04:42 UTC; 1h 45min ago
Trigger: Wed 2021-12-08 11:22:45 UTC; 13h left
Dec 07 20:04:42 encrypt systemd[1]: Started Run certbot twice daily.
ドライランを実行して更新プロセスをテストします certbot
:
- sudo certbot renew --dry-run
エラーが発生しなければ、準備は完了です。 必要に応じて、Certbotは証明書を更新し、Apacheをリロードして変更を取得します。 自動更新プロセスが失敗した場合、Let’s Encryptは指定した電子メールにメッセージを送信し、証明書の有効期限が近づくと警告を発します。
結論
このチュートリアルでは、Let’sEncryptクライアントをインストールしました certbot
、ドメインのSSL証明書を構成およびインストールし、Certbotの自動証明書更新サービスが systemctl
. Certbotの使用についてさらに質問がある場合は、それらのドキュメントから始めることをお勧めします。