Nginx で Let’s Encrypt TLS 証明書を実装するためのステップバイステップ ガイド。
TLS 証明書を使用してサイトを保護することが不可欠です。主な理由は 2 つあります。
- ユーザーのデバイスから SSL/TLS オフロードデバイスまでの安全なデータ送信
- Google検索のランキングを向上させる
最近、Google は、https:// のないサイトは Chrome ブラウザで「安全ではありません」としてマークされると 発表しました 。
そうです、HTTPS には「YES」と答えてください。
ブログ、個人サイト、非会員制、非金融取引サイトを運営している場合は、Let’s Encrypt 証明書を使用することをお勧めします。
Let’s Encrypt は 無料の証明書 を提供します。
ただし、金融取引を受け入れる場合は、 商用証明書 を使用することをお勧めします。
Nginx に TLS を実装しましょう…
このインストール ガイドを参照していない場合は、すでに Nginx がインストールされ実行されていると仮定します。
これを行うには複数の方法があります。
Certbotを使って暗号化してみよう
最も簡単で推奨されるインストール方法の 1 つです。
Certbot に は、指示を取得する Web サーバーと OS を選択できるドロップダウン メニューが用意されています。
以下に示すように、Nginx と Ubuntu を選択しました。
そして、Nginx サーバー上で以下を実行して、certbot プラグインをインストールします。
# apt-get install software-properties-common
# add-apt-repository ppa:certbot/certbot
# apt-get update
# apt-get install python-certbot-nginx
すべて問題がなければ、certbot プラグインを使用して Nginx に証明書をインストールします。
以下のコマンドを使用すると、証明書を構成するために必要なファイルを変更できます。
# certbot --nginx
既存の Nginx 構成ファイル内の CN (共通名) がチェックされ、見つからない場合は入力を求めるプロンプトが表示されます。
元:
root@instance-1:/etc/nginx/sites-available# certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
No names were found in your configuration files. Please enter in your domain
name(s) (comma and/or space separated) (Enter 'c' to cancel): bloggerflare.com
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for bloggerflare.com
Waiting for verification...
Cleaning up challenges
Deployed Certificate to VirtualHost /etc/nginx/sites-enabled/default for bloggerflare.com
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
Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/default
-------------------------------------------------------------------------------
Congratulations! You have successfully enabled https://bloggerflare.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=bloggerflare.com
-------------------------------------------------------------------------------
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/bloggerflare.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/bloggerflare.com/privkey.pem
Your cert will expire on 2018-05-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"
- 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
root@instance-1:/etc/nginx/sites-available#
証明書ボットの自動化は 賢い です!
ご覧のとおり、Nginx を https 経由で提供できるようにするために必要な設定がすべて処理されています。
ただし、Certbot に構成を変更させたくない場合は、以下のコマンドをリクエストするだけです。
# certbot --nginx certonly
上記のコマンドは変更を行わず、必要に応じて構成できるように証明書を提供するだけです。
しかし、Certbot を使用できない、または使用したくない場合はどうすればよいでしょうか?
手動手順
Let’s Encrypt によって発行された証明書を取得するにはさまざまな方法がありますが、推奨される方法の 1 つは、 SSL for Free オンライン ツールから取得することです。
URL を入力して確認方法に進みます。検証が完了すると、証明書、秘密キー、および CA を取得します。
これらをダウンロードし、Nginx サーバーに転送します。 Nginxインストールパスのsslフォルダ(存在しない場合は作成)以下に保管しましょう。
root@instance-2:/etc/nginx/ssl# ls -ltr
-rw-r--r-- 1 root root 1704 Feb 26 10:04 private.key
-rw-r--r-- 1 root root 1647 Feb 26 10:04 ca_bundle.crt
-rw-r--r-- 1 root root 3478 Feb 26 10:57 certificate.crt
root@instance-2:/etc/nginx/ssl#
構成の変更に進む前に、
certificate.crt
と
ca_bundle.crt
1 つのファイルに連結する必要があります。
tlscert.crt
という名前を付けます。
cat certificate.crt ca_bundle.crt >> tlscert.crt
-
sites-available
フォルダーに移動し、それぞれのサイト構成ファイルに次の内容を追加します。
server {
listen 443;
ssl on;
ssl_certificate /etc/nginx/ssl/tlscert.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;
}
- Nginxを再起動する
service nginx restart
HTTPS 経由でそれぞれのドメインにアクセスしてみます
さあ、成功です!
Let’s Encrypt の代わりに、ここで実装について説明されている ZeroSSL を 使用することもできます。
次に、サイトの SSL/TLS 脆弱性をテストし、見つかった場合は修正することをお勧めします。