前書き
Let’s Encryptは、無料のTLS/SSL certificatesを取得してインストールする簡単な方法を提供する認証局(CA)であり、Webサーバーで暗号化されたHTTPSを有効にします。 必要な手順のほとんど(すべてではないにしても)の自動化を試みるソフトウェアクライアントCertbotを提供することにより、プロセスを簡素化します。 現在、証明書の取得とインストールのプロセス全体は、ApacheとNginxの両方で完全に自動化されています。
このチュートリアルでは、Certbotを使用してUbuntu 16.04でNginxの無料SSL証明書を取得し、証明書が自動的に更新されるように設定します。
このチュートリアルでは、デフォルトファイルの代わりに別のNginxサーバーブロックファイルを使用します。 We recommendは、ドメインごとに新しいNginxサーバーブロックファイルを作成します。これは、いくつかの一般的な間違いを回避し、デフォルトファイルを意図したとおりのフォールバック構成として維持するのに役立つためです。 デフォルトのサーバーブロックを使用してSSLを設定する場合は、代わりにthis Nginx + Let’s Encrypt tutorialを使用できます。
前提条件
このチュートリアルを実行するには、次のものが必要です。
-
このinitial server setup for Ubuntu 16.04チュートリアルに従ってセットアップされた1つのUbuntu 16.04サーバー。これには、sudo非rootユーザーとファイアウォールが含まれます。
-
完全に登録されたドメイン名。 このチュートリアルでは、全体を通して
example.com
を使用します。 Namecheapでドメイン名を購入するか、Freenomで無料でドメイン名を取得するか、選択したドメインレジストラを使用できます。 -
次の両方のDNSレコードがサーバーに設定されています。 それらを追加する方法の詳細については、this hostname tutorialをたどることができます。
-
サーバーのパブリックIPアドレスを指す
example.com
を含むAレコード。 -
サーバーのパブリックIPアドレスを指す
www.example.com
を含むAレコード。
-
-
次のHow To Install Nginx on Ubuntu 16.04によってインストールされたNginx。
-
次のthis Nginx server blocks tutorial for Ubuntu 16.04で設定された、ドメイン用の個別のNginxサーバーブロックファイル。 このチュートリアルでは、
/etc/nginx/sites-available/example.com
を使用します。
[[step-1 -—- installing-certbot]] ==ステップ1—Certbotのインストール
Let's Encryptを使用してSSL証明書を取得する最初のステップは、サーバーにCertbotソフトウェアをインストールすることです。
Certbotは非常に活発に開発されているため、Ubuntuが提供するCertbotパッケージは古くなっています。 ただし、Certbotの開発者は、Ubuntuソフトウェアリポジトリを最新バージョンに維持しているため、代わりにそのリポジトリを使用します。
まず、リポジトリを追加します。
sudo add-apt-repository ppa:certbot/certbot
受け入れるには、ENTER
を押す必要があります。 次に、パッケージリストを更新して、新しいリポジトリのパッケージ情報を取得します。
sudo apt-get update
最後に、apt-get
を使用してCertbotのNginxパッケージをインストールします。
sudo apt-get install python-certbot-nginx
Certbotを使用する準備ができましたが、Nginx用にSSLを構成するには、Nginxの構成の一部を確認する必要があります。
[[step-2 -—- confirming-nginx-39-s-configuration]] ==ステップ2—Nginxの構成を確認する
CertbotがSSLを自動的に構成できるようにするには、Nginx構成で正しいserver
ブロックを見つけることができる必要があります。 具体的には、証明書を要求するドメインに一致するserver_name
ディレクティブを探すことによってこれを行います。
Nginx server blocksの前提条件のチュートリアルに従った場合は、server_name
ディレクティブが適切に設定された/etc/nginx/sites-available/example.com
にドメインのサーバーブロックが必要です。
確認するには、nano
またはお気に入りのテキストエディタを使用して、ドメインのサーバーブロックファイルを開きます。
sudo nano /etc/nginx/sites-available/example.com
既存のserver_name
行を見つけます。 これは次のようになります。
/etc/nginx/sites-available/example.com
. . .
server_name example.com www.example.com;
. . .
存在する場合は、エディターを終了して次の手順に進むことができます。
一致しない場合は、一致するように更新します。 次に、ファイルを保存し、エディターを終了して、構成編集の構文を確認します。
sudo nginx -t
エラーが発生した場合は、サーバーブロックファイルを再度開いて、タイプミスや文字の欠落を確認してください。 構成ファイルの構文が正しい場合、Nginxをリロードして新しい構成をロードします。
sudo systemctl reload nginx
Certbotは、正しいserver
ブロックを見つけて、それを更新できるようになりました。
次に、ファイアウォールを更新してHTTPSトラフィックを許可します。
[[step-3 -—- allowing-https-through-the-firewall]] ==ステップ3—ファイアウォールを介したHTTPSの許可
前提条件ガイドで推奨されているように、ufw
ファイアウォールを有効にしている場合は、HTTPSトラフィックを許可するように設定を調整する必要があります。 幸い、Nginxはインストール時にいくつかのプロファイルをufw
で登録します。
次のように入力すると、現在の設定を確認できます。
sudo ufw status
これはおそらく次のようになります。つまり、WebサーバーへのHTTPトラフィックのみが許可されます。
OutputStatus: 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'
ステータスは次のようになります。
sudo ufw status
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
これで、Certbotを実行して証明書を取得する準備が整いました。
[[step-4 -—- ssl-certificateの取得]] ==ステップ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設定をどのように構成するかを尋ねます。
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):
選択してからENTER
を押します。 設定が更新され、Nginxがリロードして新しい設定を取得します。 certbot
は、プロセスが成功したことと、証明書が保存されている場所を通知するメッセージで終了します。
OutputIMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
expire on 2017-10-23. 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
証明書がダウンロード、インストール、およびロードされます。 https://
を使用してWebサイトをリロードしてみて、ブラウザのセキュリティインジケータに注目してください。 通常は緑色のロックアイコンで、サイトが適切に保護されていることを示す必要があります。 SSL Labs Server Testを使用してサーバーをテストすると、サーバーはAグレードを取得します。
最後に、更新プロセスをテストします。
[[step-5 -—- verifying-certbot-auto-renewal]] ==ステップ5—Certbotの自動更新を確認する
Let's Encryptの証明書は90日間のみ有効です。 これは、ユーザーが証明書の更新プロセスを自動化することを奨励するためです。 インストールしたcertbot
パッケージは、/etc/cron.d
に更新スクリプトを追加することでこれを処理します。 このスクリプトは1日に2回実行され、有効期限の30日以内にある証明書を自動的に更新します。
更新プロセスをテストするには、certbot
を使用してドライランを実行できます。
sudo certbot renew --dry-run
エラーが表示されなければ、設定は完了です。 必要に応じて、Certbotは証明書を更新し、Nginxをリロードして変更を反映します。 自動更新プロセスが失敗した場合、Let’s Encryptは指定したメールにメッセージを送信し、証明書の有効期限が近づいていることを警告します。
結論
このチュートリアルでは、Let’s Encryptクライアントcertbot
をインストールし、ドメインのSSL証明書をダウンロードし、これらの証明書を使用するようにNginxを構成し、証明書の自動更新を設定しました。 Certbotの使用についてさらに質問がある場合は、their documentationから始めることをお勧めします。