One place for hosting & domains

      2004でLets

      Ubuntu 20.04でLet’s Encryptを使用してApacheを保護する方法


      はじめに

      Let’s Encryptは、無料のTLS /SSL証明書の取得ならびにインストール、またWebサーバーでのHTTPS暗号化の有効を円滑にする認証局(CA)です。必要な手順のほとんど(すべてではないにしても)の自動化を試みるソフトウェアクライアントCertbotを提供することにより、プロセスを簡素化します。 現在、証明書の取得とインストールのプロセス全体は、ApacheとNginxの両方で完全に自動化されています。

      このチュートリアルでは、Certbotを使用してUbuntu 20.04にインストールされたApacheに無料のSSL証明書を取得し、証明書が自動更新されるように設定します。

      このチュートリアルでは、Apacheのデフォルト設定ファイルの代わりに、個別の仮想ホストファイルを使用して、Let’s Encryptで保護するWebサイトをセットアップします。 アドバイス:各ドメインに新しいApache仮想ホストファイルを作成すると、よくある間違いを回避しデフォルトファイルをフォールバック設定として維持するのに役立ちます。

      前提条件

      このチュートリアルを実行するには、次のものが必要です。

      • Ubuntu 20.04初期サーバーセットアップチュートリアルに従ってセットアップされたUbuntu 20.04サーバー1台、sudo権限を持つroot以外のユーザーおよびファイアウォール。

      • 完全に登録されたドメイン名。このチュートリアルでは、例としてyour_domainを使用します。Namecheapからドメイン名を購入またはFreenomから無料で取得するか、あるいはお好みのドメインレジストラーを使用できます。

      • 次の2つのDNSレコードがサーバーにセットアップされています。 これらの追加方法は、DigitalOcean DNSの紹介をご覧ください。

        • サーバーのパブリックIPアドレスを指すyour_domainを持つAレコード。
        • サーバーのパブリックIPアドレスを指すwww.your_domainを持つAレコード。
      • Ubuntu 20.04にApacheをインストールする方法に従ってインストールされたApache。ドメイン用に仮想ホストファイルがあることを確認してください。このチュートリアルでは、例として/etc/apache2/sites-available/your_domain.confを使用します。

      ステップ1— Cerbotのインストール

      Let’s Encryptを使用してSSL証明書を取得するには、まずサーバーにCertbotソフトウェアをインストールします。ここではデフォルトのUbuntuパッケージリポジトリを使用します。

      certbotpython3-certbot-apacheの2つのパッケージが必要です。python3-certbot-apacheは、CertbotをApacheと統合するプラグインで、証明書の取得やWebサーバー内のHTTPS設定がコマンド1つで自動化できます。

      • sudo apt install certbot python3-certbot-apache

      YENTERキーを押すと、Apacheのインストールの確認を求める画面が表示されます。  

      これでCertbotがサーバーにインストールされました。次のステップでは、Apacheの設定を検証し、仮想ホストが適切に設定されたことを確認します。これによって、certbotクライアントスクリプトがドメインを検出し、Webサーバーを再設定して新たに生成したSSL証明書を自動的に使用できるようになります。  

      ステップ2 — Apache仮想ホスト設定の確認

      WebサーバーでSSLを自動的に取得・設定できるようにするには、CertbotがApache設定ファイルの中で正しい仮想ホストを見つける必要があります。サーバードメイン名は、VirtualHost設定ブロックで定義されたServerNameServerAliasディレクティブから取得されます。

      Apacheインストールチュートリアル ー 仮想ホストの設定に従った場合、ドメインのVirtualHostブロックは/etc/apache2/sites-available /your_domain.confにセットアップされているはずです。また、ServerNameとServerAliasディレクティブも適切に設定されているはずです。

      確認するには、nanoまたはお好みのテキストエディターを使用してドメインの仮想ホストファイルを開きます。

      • sudo nano /etc/apache2/sites-available/your_domain.conf

      既存のServerNameServerAlias行を検索します。次のようになります。

      /etc/apache2/sites-available/your_domain.conf

      ...
      ServerName your_domain
      ServerAlias www.your_domain
      ...
      

      ServerNameServerAliasがこのようにセットアップされている場合は、テキストエディターを終了して、次の手順に進みます。  nanoを使用した場合は、CTRL + X、YENTERキーを押し、終了します。

      現在の仮想ホスト設定が例のとおりでなければ、適宜更新します。完了したら、ファイルを保存してエディターを終了します。次に、以下のコマンドを実行して変更を検証します。

      • sudo apache2ctl configtest

      Syntax OKが返ってきます。 エラーが発生した場合は、サーバーブロックファイルを再度開いて、入力ミスや文字の欠落を確認してください。設定ファイルの構文が正しければ、Apacheをリロードして変更を有効にします。

      • sudo systemctl reload apache2

      これでCerbotは正しいVirtualHostブロックを探して更新します。

      次に、ファイアウォールを更新してHTTPSトラフィックを許可します。

      ステップ3 — ファイアウォールを介したHTTPSの許可

      前提条件ガイドで推奨されているように、ufwファイアウォールを有効にした場合、HTTPSトラフィックを許可するように設定を調整する必要があります。インストール時に、ApacheはUFWアプリケーションプロファイルをいくつか登録します。 Apache Fullプロファイルを活用して、HTTPとHTTPSの両トラフィックをサーバーに許可できます。

      現在、サーバーで許可されているトラフィックの種類を確認するには、以下を使用します。

      Apacheのインストールガイドに従った場合、出力結果はこのようになります。つまり、現在ポート80でHTTPトラフィックのみ許可されている、ということになります。

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

      HTTPSトラフィックも許可する場合は、「Apache Full」プロファイルを許可し、重複する「Apache」プロファイルを削除します。

      • sudo ufw allow 'Apache Full'
      • sudo ufw delete allow 'Apache'

      ステータスは次のようになります。

      Output

      Status: 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の再設定と設定の再読み込みを処理します。このプラグインを使用するには、次を入力します。

      このスクリプトは、SSL証明書を設定するために、一連の質問に答えるよう求められます。まず、有効なメールアドレスを求められます。  このメールアドレスは、更新通知とセキュリティ通知に使用されます。

      Output

      Saving 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キーを押します。

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Please 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
      

      次に、Electronic Frontier Foundation (電子フロンティア財団)にメールアドレスを知らせてニュース等の情報を受け取るかを尋ねられます。受け取らない場合は、Nキーを押します。それ以外はYENTERキーを押して、次のステップに進みます。

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Would 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仮想ホスト設定から自動取得されるので、ServerNameServerAliasが仮想ホストで正しく設定されているか確認することが重要です。一覧にある全ドメイン名のHTTPSを有効にする (推奨)場合、プロンプトには何も入力せずENTERキーを押して次へ進みます。 それ以外の場合は、 HTTPSを有効にしたいドメインの番号を、コンマおよび/またはスペースで区切りながら列挙して選択し、ENTERキーを押します。 

      Which names would you like to activate HTTPS for?
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      1: your_domain
      2: www.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):
      

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

      Obtaining a new certificate
      Performing the following challenges:
      http-01 challenge for your_domain
      http-01 challenge for www.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を、HTTPとHTTPSをそれぞれ別のWebサイトアクセス方式にしておく場合は1を選択します。

      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
      
      

      これでCertbotの設定は完了です。新しい証明書、生成ファイルの場所、証明書の信頼性を分析する外部ツールによる設定テストのやり方について最終的なコメントが表示されます。

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Congratulations! You have successfully enabled https://your_domain and
      https://www.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=www.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 2020-07-27. 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
      
      

      証明書がインストールされ、 Apacheの設定にロードされます。https://を使用してウェブサイトをリロードしてみて、ブラウザのセキュリティインジケータに注目してください。アドレスバーのロックアイコンなどで、サイトが適切に保護されていることが示されるはずです。

      SSL Labs Server Testを使用すれば、証明書のグレードと詳細情報を外部サービスの観点から確認できます。

      最後のステップでは、証明書を有効期限前に確実に自動更新させる、Certbotの自動更新機能をテストします。  

      ステップ5 — Certbotの自動更新の検証

      Let’s Encryptの証明書は90日間のみ有効です。これは、誤用された証明書や盗まれたキーがほどなく期限切れになるように、ユーザーが証明書更新プロセスを自動化するよう奨励するためです。

      インストールされたcertbotパッケージは、certbot.timerというsystemctlサービスによって管理されている/etc/cron.dの中に更新スクリプトを置くことにより、更新処理を行います。 このスクリプトは、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: enabled) Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left Triggers: ● certbot.service Apr 28 17:57:48 fine-turtle systemd[1]: Started Run certbot twice daily.

      更新プロセスをテストするには、certbotでドライランを実行できます。

      • sudo certbot renew --dry-run

      エラーが表示されなければ、設定は完了です。 必要に応じて、Certbotは証明書を更新し、Apacheをリロードして変更を反映します。自動更新プロセスが失敗した場合、Let’s Encryptは指定したメールアドレスにメッセージを送信し、証明書の有効期限が近づいていることを警告します。

      まとめ

      このチュートリアルでは、Let’s Encryptクライアントcertbotのインストール、SSL証明書の設定またインストールをドメインにおこないました。さらにCertbotの自動更新サービスがsystemctl内で有効になっていることも確認しました。Certbotの使用についてさらに知りたい場合は、公式ドキュメントから始めるとよいでしょう。 



      Source link

      Ubuntu 20.04でLet’s Encryptを使用してNginxを保護する方法


      はじめに

      Let’s Encryptは、無料のTLS /SSL証明書を取得してインストールし、Webサーバーで暗号化されたHTTPSを有効にする簡単な方法を提供する認証局(CA)です。必要な手順のほとんど(すべてではないにしても)の自動化を試みるソフトウェアクライアントCertbotを提供することにより、プロセスを簡素化します。 現在、証明書の取得とインストールのプロセス全体は、ApacheとNginxの両方で完全に自動化されています。

      このチュートリアルでは、Certbotを使用して、Ubuntu 20.04上のNginx用の無料のSSL証明書を取得し、証明書が自動的に更新されるように設定します。

      このチュートリアルでは、デフォルトファイルの代わりに別のNginxサーバー設定ファイルを使用します。アドバイス:各ドメインに新しいNginxサーバーブロックファイルを作成すると、よくある間違いを回避し、デフォルトファイルをフォールバック設定として維持するのに役立ちます。

      前提条件

      このチュートリアルを実行するには、次のものが必要です。

      • Ubuntu 20.04の初期サーバーセットアップチュートリアルに従ってセットアップされたUbuntu 20.04サーバー1台、sudo権限を持つroot以外のユーザーおよびファイアウォール。

      • 登録されたドメイン名。このチュートリアルでは、全体を通してexample.com を使用します。Namecheapからドメイン名を購入するか、Freenomから無料で取得するか、あるいはお好みのドメインレジストラを使用できます。

      • 次の2つのDNSレコードがサーバーにセットアップされています。 DigitalOceanをご使用の場合、追加方法の詳細についてはDNSドキュメントを参照してください。

        • サーバーのパブリックIPアドレスを指すexample.comを持つAレコード。
        • サーバーのパブリックIPアドレスを指すwww.example.comを持つAレコード。
      • Ubuntu 20.04にNginxをインストールする方法に従ってインストールされたNginx。ドメインのサーバーブロック。このチュートリアルでは、例として/etc/nginx/site-able/example.comを使用します。

      ステップ1— Cerbotのインストール

      Let’s Encryptを使用してSSL証明書を取得する最初のステップは、サーバーにCertbotソフトウェアをインストールすることです。

      aptを使用してCertbotとNginxプラグインをインストールします。

      • sudo apt install certbot python3-certbot-nginx

      Certbotを使用する準備ができましたが、NginxにSSLを自動設定するには、Nginxの設定をいくつか確認する必要があります。

      ステップ2 — Nginxの設定確認

      SSLを自動設定するには、CertbotがNginx設定で正しいserverブロックを見つけられる必要があります。 具体的には、証明書を要求するドメインと一致するserver_nameディレクティブを探すことでこれを行います。

      Nginxインストールチュートリアルのサーバーブロックのセットアップ手順に従えば、/ etc/nginx/sites-available/example.comにドメインのサーバーブロックがあり、server_name ディレクティブが適切に設定されているはずです。“

      確認するには、nanoまたはお気に入りのテキストエディターを使用してドメインの設定ファイルを開きます。

      • sudo nano /etc/nginx/sites-available/example.com

      既存のserver_name 行を探します。次のように表示されます。

      /etc/nginx/sites-available/example.com

      ...
      server_name example.com www.example.com;
      ...
      

      一致する場合は、エディターを終了し、次の手順に進みます。

      一致しない場合は、一致するように更新します。次に、ファイルを保存し、エディターを終了して、設定編集した構文を確認します。

      エラーが発生した場合は、サーバーブロックファイルを再度開いて、入力ミスや文字の欠落を確認してください。設定ファイルの構文が正しければ、Nginxをリロードして新しい設定をロードします。

      • sudo systemctl reload nginx

      これでCertbotは正しいserverブロックを見つけて、自動更新できるようになりました。

      次に、ファイアウォールを更新してHTTPSトラフィックを許可します。

      ステップ3 — ファイアウォールを介したHTTPSの許可

      前提条件ガイドで推奨されているように、ufwファイアウォールを有効にしている場合、HTTPSトラフィックを許可するように設定を調整する必要があります。幸いなことに、Nginxには、インストール時にufwを備えたプロファイルがいくつか登録されています。

      次のように入力すると、現在の設定を確認できます。

      これは次のように表示され、WebサーバーへのHTTPトラフィックのみが許可されることを意味します。

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

      さらにHTTPSトラフィックを許可するには、Nginx Fullプロファイルを許可し、重複するNginx HTTPプロファイル許可を削除します。

      • sudo ufw allow 'Nginx Full'
      • sudo ufw delete allow 'Nginx HTTP'

      ステータスは次のようになります。

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

      次に、Certbotを実行して証明書を取得します。

      ステップ4 — SSL証明書の取得

      Certbotは、プラグインを介してSSL証明書を取得するさまざまな方法を提供します。Nginxプラグインは、必要に応じてNginxの再設定と設定の再読み込みを処理します。このプラグインを使用するには、次を入力します。

      • sudo certbot --nginx -d example.com -d www.example.com

      これは、-nginxプラグインでcertbotを実行し、-dを使用して証明書を有効にするドメイン名を指定します。

      初めてcertbotを実行する場合は、メールアドレスを入力し、利用規約に同意するよう求められます。これを行った後、certbotはLet’s Encryptサーバーと通信し、チャレンジを実行して、証明書を要求しているドメインを制御していることを確認します。

      それが成功すると、certbotはHTTPS設定をどのように行うかを尋ねます。

      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):

      選択項目を選択し、ENTERを押します。設定が更新され、Nginxがリロードして新しい設定を取得します。 certbotは、プロセスが成功したこと、および証明書が保存されている場所を通知するメッセージを表示した後終了します。

      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 2020-08-18. 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

      証明書がダウンロード、インストール、およびロードされます。https://を使用してウェブサイトをリロードしてみて、ブラウザのセキュリティインジケータに注目してください。通常はロックアイコンで、サイトが適切に保護されていることを示すはずです。 SSL Labs Server Testを使用してサーバーをテストすると、Aグレードになります。

      最後に、更新プロセスをテストします。

      ステップ5 — Certbotの自動更新の検証

      Let’s Encryptの証明書は90日間のみ有効です。これは、ユーザーが証明書の更新プロセスを自動化することを奨励するためです。インストールした certbotパッケージは、systemdタイマーを追加することでこれを処理します。 このスクリプトは1日に2回実行され、有効期限の30日以内にある証明書を自動更新します。

      systemctlを使用してタイマーのステータスを確認できます。

      • sudo systemctl status certbot.timer

      Output

      ● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left Triggers: ● certbot.service

      更新プロセスをテストするには、certbotでドライランを実行できます。

      • sudo certbot renew --dry-run

      エラーが表示されなければ、設定は完了です。 必要に応じて、Certbotは証明書を更新し、Nginxをリロードして変更を反映します。自動更新プロセスが失敗した場合、Let’s Encryptは指定したメールアドレスにメッセージを送信し、証明書の有効期限が近づいていることを警告します。

      まとめ

      このチュートリアルでは、Let’s Encryptクライアント certbotをインストールし、ドメインのSSL証明書をダウンロードし、これらの証明書を使用するようにNginxを設定し、自動証明書更新をセットアップしました。Certbotの使用についてさらに知りたい場合は、公式ドキュメントから始めるとよいでしょう。



      Source link