Ubuntuの18.04でnginxの保護にレッツ・暗号化の使用

レッツ・暗号化は、インターネットセキュリティ研究グループ(ISRG)フリーでオープンな証明書の開発によって発行されます。今日では、ほとんどすべてのブラウザレッツ・暗号化信頼証明書を発行しました。

レディ状態

チュートリアルを続行する前に、次の前提条件を満たしていることを確認してください。

  • あなたは、パブリックIPドメインネームサーバにポイントを持っています。このチュートリアルでは、example.comを使用します。
  • あなたは続くの手順 nginxのをインストールするに。
  • あなたは、あなたのドメインのサーバー用のブロックを持っています。あなたはこの記事に従ったものを作成する方法の詳細な情報を得ることができます。

インストールCertbot

Certbotは、フル機能かつ簡単に、自動的に取得してみましょう暗号化SSL証明書を更新し、自分のタスクを使用するようにWebサーバーを構成することができ、使用するツールです。デフォルトのUbuntuのリポジトリに含まcertbotパッケージ。

パッケージリストを更新し、certbotパッケージをインストールします。

sudo apt update
sudo apt install certbot

強度のDH(ディフィー・ヘルマン)グループを生成します

ディフィー・ヘルマン鍵交換(DH)が確実に安全でない通信チャネルで暗号鍵を交換する方法です。私たちは、セキュリティを強化するために2048 DHパラメータの新しいセットを生成します。

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
ご希望の場合は、4096にサイズを変更することができますが、この場合には、発電システムのエントロピーに応じて、30分以上かかる場合があります。

レッツ・暗号化SSL証明書を取得します。

私たちのドメインのSSL証明書を取得するために、我々は、ウェブルートのプラグスルーを使用します${webroot-path}/よく知られている/acme-challengeカタログとレッツ・仕事に要求されたドメイン用の一時ファイルの暗号化を作成します。認証サーバDNS解決要求フィールドはcertbotサーバーを実行しているかどうかを確認するためにHTTPリクエスト。

それを簡単にするために、我々はなります.well-known/acme-challengeすべてのHTTP要求は、単一のディレクトリにマッピングされました/ var/lib/letsencrypt

次のコマンドは、ディレクトリを作成し、それがnginxのサーバーのように記述することができます。

mkdir -p /var/lib/letsencrypt/.well-known
chgrp www-data /var/lib/letsencrypt
chmod g+s /var/lib/letsencrypt

以下の二つのセグメントを作成し、コードの重複を避けるために、我々は、ファイル内のすべてのnginxのサーバーのブロックでは、これらの断片が含まれます。

テキストエディタを開き、最初のフラグメントを作成しますletsencrypt.conf

sudo nano /etc/nginx/snippets/letsencrypt.conf

/etc/nginx/snippets/letsencrypt.conf

location ^~ /.well-known/acme-challenge/ {
  allow all;
  root /var/lib/letsencrypt/;
  default_type "text/plain";
  try_files $uri =404;
}

Mozillaは、チッパーを推奨サポートOCSPホチキス、HTTP厳格な交通セキュリティ(HSTS)とセキュリティ中心のいくつかのHTTPヘッダを強制含めて、第2のコードセグメントの.confを作成します。

sudo nano /etc/nginx/snippets/ssl.conf

/etc/nginx/snippets/ssl.conf

ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 30s;

add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;

断片を作成した後、および含むドメインサーバーブロック開きletsencrypt.conf、次のように、セグメント。

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

server {
  listen 80;
  server_name example.com www.example.com;

  include snippets/letsencrypt.conf;
}

リロードnginxの設定を有効にするに変更します。

sudo systemctl reload nginx

これで、プラグインウェブルートの実行Certbotを使用して、次のコマンドを発行してSSL証明書ファイルを入手できます。

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

成功したSSL証明書の場合は、certbotは以下のメッセージを出力します:

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 2018-07-28. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. 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

次のように今、あなたは証明書ファイルを持っていることを、あなたはドメインサーバのブロックを編集することができます。

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

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

server {
    listen 80;
    server_name www.example.com example.com;

    include snippets/letsencrypt.conf;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # . . . other code
}

上記構成により、我々は、HTTPSを強制し、非のwwwバージョンへのWWWからリダイレクトします。

変更を有効にするためにリロードnginxのサービス:

sudo systemctl reload nginx

私たちは自動的に暗号化されたSSL証明書を更新してみましょう

私たちの暗号化証明書は90日間有効です。期限が切れる前に自動的に証明書を更新するには、certbo tのパッケージには、一日二回実行するcronジョブを作成し、自動的に有効期限前に30日以内のいずれかの証明書を更新します。

我々はまた、nginxのサービスをリロードする必要がありますので、我々は、証明書を更新した後certbotのウェブルートのプラグインを使用しているので。「systemctlリロードnginxの」/etc/cron.d/certbotをファイルに追加--renewフックは、それは次のようになります。

sudoのナノ/etc/cron.d/certbot
0 * / 12 * * *ルートテスト-xは/ usr / binに/ certbot -a \!-d /実行/ systemdに/システム&&のperl -e '睡眠INT(RAND(3600))' && certbot -q更新--renew・フック"systemctlリロードnginxの"

中古certbotの--dry-実行スイッチすることができ、更新プロセスをテストするには:

sudo certbot renew --dry-run

エラーがない場合には、更新プロセスが成功しました。

概要

このチュートリアルでは、ドメインのSSL証明書をダウンロードするには、暗号化クライアントレッツ・エンドcertbotを使用しています。また、nginxのを作成した証明書を使用して、コードと設定nginxのの重複を避けるためにスニペット。このチュートリアルの最後には、証明書の自動更新のためのcronジョブを設定しています。

あなたはCertbotを使用する方法についての詳細をご希望の場合、およびその文書は良い学習の場です。

おすすめ

転載: www.linuxidc.com/Linux/2020-02/162228.htm