GNU/Linux >> Linux の 問題 >  >> Debian

Lets Encrypt and Secure Nginx with SSL/TLSをDebian9にインストールする

このチュートリアルでは、Let’s EncryptCertificateAuthorityによって無料で発行されたTLS証明書を使用してDebian9にNginxWebサーバーをインストールして保護する方法を示します。さらに、証明書の有効期限が切れる前に、cronジョブを使用してLets’EncryptTLS証明書の自動更新を構成します。

TLSは、トランスポート層セキュリティとも呼ばれ、SSL証明書を使用して、サーバーとクライアント間、またはNginxサーバーなどのWebサーバーとブラウザー間を流れるネットワークトラフィックを暗号化するネットワークプロトコルです。これら2つのエンティティ間で交換されるすべてのデータは保護されており、中間者攻撃やパケットスニッフィングなどの手法を使用して傍受された場合でも、接続を復号化することはできません。 certbot パッケージソフトウェアは、Let’s Encrypt CAが提供する公式のクライアントユーティリティであり、Debianで無料のLet’sEncrypt証明書を生成およびダウンロードするプロセスで使用できます。

要件

  • Debian9にLEMPスタックをインストールします。
  • 適切なDNSレコード(サブドメインのAレコードまたはCNAMEレコード)を含む公開登録ドメイン名。
  • サーバーのコンソールへの直接アクセスまたはサーバーへのリモートSSHアクセス。
  • root権限またはrootアカウントへの直接アクセス権を持つユーザーアカウント。

Certbotクライアントユーティリティのインストール

Let's Encrypt cerbotをインストールするには 次のスクリーンショットに示すように、Debian公式リポジトリからのDebian 9のクライアントユーティリティで、ターミナルを開き、root権限で次のコマンドを発行します。

 apt-get install certbot 

Debian apt Debianメインパッケージマネージャーのコマンドラインインターフェイスであるユーティリティは、いくつかの予備チェックの後に、certbotパッケージとそれに必要なすべての依存関係のインストールを続行することに同意するかどうかを尋ねます。ソフトウェアのインストールプロセスを受け入れるには、はいで回答します (y)サーバーのコンソールプロンプトで。

Get Let’s Encrypt Certificate

ドメインのLet’s Encrypt証明書を生成してダウンロードするには、まずNginx Webサーバーが稼働中であり、少なくともポート80がインターネットからアクセス可能であることを確認します。 Nginxが実行されているかどうかを確認するには、root権限で次のコマンドを実行します。

 sudo systemctl status nginx 

サーバーがまだ実行されていない場合は、以下のコマンドでNginxデーモンを起動します。

 sudo systemctl start nginx 

ポート80および443ですべての着信接続をブロックするUFWファイアウォールなどの共通ファイアウォールがDebianにインストールされている場合は、以下のコマンドを発行して、システムでHTTPおよびHTTPSポートを開きます。

 sudo ufw allow 80 / tcp 
 sudo ufw allow 443 / tcp 

ドメインの証明書を取得するには、 cerbotを実行します 以下で説明するように、次のパラメータとフラグを使用してコンソールでコマンドを実行します。 root権限でコマンドを実行し、 –d を使用して、ドメイン名と証明書を取得する他のすべてのサブドメインを指定します 国旗。また、-スタンドアロンを提供します certbotがNginx構成ファイルに干渉しないようにするためのオプション。このオプションを使用して証明書を発行している間は、Nginxサーバーを停止する必要があります。

cerbotコマンドの構文:

 sudo certbot certonly --standalone –d yourdomain.com –d www.yourdomain.com 

最初にcertbotコマンドを実行して証明書を取得すると、メールアドレスを追加し、Let’sEncryptの利用規約に同意するよう求められます。 「a」と書く 」は、サービス条件「いいえ」に同意します Let’sEncryptパートナーとメールアドレスを共有しないようにします。最後に、ドメインの証明書を取得したら、フッターノートを読んで、証明書のシステムパスと有効期限が切れる日付を見つけます。

Let'sEncryptSSL証明書を取得する別の方法

webroot」を介してLet’sEncrypt証明書を取得するには "プラグインは以下の構文を使用します。デフォルトで/var / www / html /にあるNginxWebルートディレクトリを追加します -webrootを使用してcertbotコマンドを発行しているときのシステムパス および–w フラグ。また、/。well-knownを作成するには、NginxにWebルートディレクトリへの完全な書き込み権限があることを確認してください。 ディレクトリ。

-webrot cerbotのオプションでは、証明書の更新とセキュリティ通知のために電子メールアドレスを追加するように求められます。 サートボット クライアントには、偽の電子メールアドレスを検出できる組み込みコードがあります。証明書の取得を続行するには、公開されているアクセス可能な電子メールアドレスを提供する必要があります。

 certbot certonly --webroot –w / var / www / html / -d yourdomain.com –d www.yourdomain.com 

デバッグログを/var/log/letsencrypt/letsencrypt.logに保存 
 メールアドレスを入力します(緊急の更新とセキュリティ通知に使用されます)(「c」を入力して 
 キャンセル):[メール保護]#偽のメールアドレスが検出されます  
そのアドレスに問題があるようです  。メールアドレスを入力してください( 
 緊急の更新とセキュリティに関する通知)本当にこれをスキップしたい場合は、 
  --register-unsafely-without-emailを使用してクライアントを実行しますが、必ず実行してください 
  / etc /letsencrypt/accountsからアカウントキーをバックアップします(キャンセルするには「c」と入力します):[メールで保護]  
   
  -------------------------------------------- -----------------------------------  
利用規約をお読みください 
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf。同意する必要があります 
ACMEサーバーに登録するには 
  https://acme-v01.api.letsencrypt.org/directory  
  -------------------------------------------- -----------------------------------  
 (A)gree /(C)ancel: a   
   
  -------------------------------------------- -----------------------------------  
メールアドレスをElectronicFrontierと共有していただけませんか 
  Foundation、Let'sEncryptプロジェクトと非営利団体の創設パートナー 
  Certbotを開発する組織? EFFとに関するメールをお送りします。 
  Webを暗号化し、ユーザーを保護し、デジタル権利を保護するための取り組み。 
  -------------------------------------------- -----------------------------------  
 (Y)es /(N)o: n   
新しい証明書の取得 
 次の課題を実行する: 
www.domain.comのhttp-01チャレンジ 
一致しないすべてのドメインにウェブルートパス/var/ www /html/を使用します。 
確認を待っています... 
課題のクリーンアップ 
   
 重要な注意事項: 
 -おめでとうございます!証明書とチェーンはに保存されています 
/etc/letsencrypt/live/www.yourdomain.com/fullchain.pem。あなたの 
証明書は2017-12-28に期限切れになります。新しいバージョンまたは微調整されたバージョンを入手するには 
 将来、この証明書のcertbotを再度実行するだけです。  
 非対話的にすべての証明書を更新し、「certbot」を実行します 
更新" 
-アカウントのクレデンシャルがCertbotに保存されました 
  / etc/letsencryptにある構成ディレクトリ。  
このフォルダの安全なバックアップを今すぐ作成してください。この構成 
ディレクトリには取得した証明書と秘密鍵も含まれます 
  Certbotによるため、このフォルダの定期的なバックアップを作成するのが理想的です。 
 -Certbotが気に入った場合は、次の方法でGoogleの作業をサポートすることを検討してください。 
   
 ISRGへの寄付/Let'sEncrypt:https://letsencrypt.org/donate  
  EFFへの寄付:  https://eff.org/donate-le  

TLS(SSL)用にNginxを構成する

ドメインのNginxの完全なデフォルトTLS構成ファイルは、以下のファイルの抜粋のようになります。

/ etc / nginx / sites-enabled / default-ssl ファイルサンプル:

サーバー{
443ssldefault_serverをリッスンします;
聞きます[::]:443 ssl default_server;

server_name www.yourdomain.com yourdomain.com;
#server_name _;

root / var / www / html;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

#SSL証明書
ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem";
ssl_certificate_key"/etc/letsencrypt/live/www。yourdomain.com/privkey.pem";
ssl_dhparam /etc/nginx/dhparam.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_ciphers EECDH + CHACHA20:EECDH + AES128:RSA + AES128:EECDH + AES256:RSA + AES256:EECDH + 3DES:RSA + 3DES:!MD5;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

add_header Strict-Transport-Security "max-age =31536000;
#includeSubDomains"常に;

場所/{
index index.php index.html index.htm;
try_files $ uri $ uri / /index.php?$args $ uri / =404;
}


set $ cache_uri $ request_uri;

場所〜/.well-known {
すべてを許可する;
}


##php-fpm(または他のUNIXソケット)を使用する場合:
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
##php-cgi(または他のtcpソケット)を使用する場合:
#fastcgi_pass 127.0.0.1:9000;
}

#Apacheのドキュメントルートの場合、.htaccessファイルへのアクセスを拒否します
#nginxのものと一致します

#location〜 /\.ht {
#すべてを拒否する;
#}

}

FastCGI Process Managerを介してPHPスクリプトを処理するためのコード行もこの抜粋にあり、次の行で表されています。

  location〜 \ .php $ {
include snippets / fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}

Let'sEncrypt証明書をNginxにインストール

Let'sEncryptの証明書とキーは/etc/letsencrypt/live/www.yourdomain.com/に保存されています Debianのディレクトリ。 ls 上記のディレクトリに対してコマンドを実行すると、チェーンファイル、フルチェーンファイル、秘密鍵、証明書ファイルなどのすべての証明書コンポーネントが表示されます。

 ls /etc/letsencrypt/live/www.yourdomain.com/ 

Let’sEncrypt証明書をNginxWebサーバーのTLS構成ファイルにインストールするには、Nginx default-sslを開きます。 以下の抜粋に示すように、ドメインのLet’sEncrypt証明書ファイルパスを反映するように以下の行をファイルして更新します。

 nano / etc / nginx / sites-enabled / default-ssl 

次の行を次のように変更します。

 ssl_certificate "/etc/letsencrypt/live/www.yourdomain.com/cert.pem"; 
ssl_certificate_key "/etc/letsencrypt/live/www.yourdomain.com / pri>>

また、 ssl_dhparam ステートメントはNginxSSL構成に存在するため、次のコマンドを発行して、新しい2048ビットのDiffie-Hellmanキーを生成する必要があります。システムのランダム性またはエントロピーによっては、Diffie–Hellman鍵パラメーターの生成に時間がかかる場合があります。

 openssl dhparam –out /etc/nginx/dhparam.pem 2048 

最後に、変更を反映するためにNginxデーモンを再起動してNginx TLS構成をアクティブ化する前に、まずNginx構成で潜在的な構文エラーを確認します。その後、Nginx構成ファイルのテストが成功した場合は、以下のコマンドを発行して、Nginxデーモンを再起動し、Let’sEncrypt証明書と一緒に新しい構成をロードします。

 nginx -t 
 service nginx restart 

nginxサービスがポート443でリスニング状態の開いたソケットを所有しているかどうかを確認するには、 netstatを実行します 以下の抜粋に示すようにコマンド。

 netstat –tulpn | grep -e 443 -e LISTEN 

また、ブラウザを開き、HTTPSプロトコルを介してドメイン名に移動する必要があります。 Let’s Encrypt証明書がNginxで正常に適用された場合、SSLハンドシェイクはエラーをスローすることなくスムーズに機能するはずです。

https://www.yourdomain.com

WebトラフィックをHTTPSに強制する

ドメイン訪問者にHTTPSプロトコル経由でのみWebサイトを閲覧させるには、Nginxサイト対応のデフォルト構成ファイルを開き、次の行を追加します。これにより、ポート80にヒットしたすべてのリクエストが、301ステータスコード(永続的に移動)でポートにリダイレクトされます。 443。

 nano / etc / nginx / sites-enabled / default 

リダイレクトステートメントは、以下の抜粋に示されているようになります。

  server_name www.yourdomain.com yourdomain.com; 
return 301 https:// $ server_name $ request_uri;

その後、以下のコマンドを発行して、Nginxデーモンを再起動して変更を適用します。

 service nginx restart 
最終チェック

Let’s Encrypt CAによって生成された証明書をさらに調査するには、Chromeなどの最新のWebブラウザを使用できます。 Chromeブラウザからドメインにアクセスし、F12ファンクションキーを押して開発者ツールを開きます。 [セキュリティ]タブに移動し、証明書の表示をクリックします 次のスクリーンショットに示すように、証明書を開くにはボタンをクリックします。

SSL証明書を調査する際のもう1つの便利なユーティリティは、 opensslであることがわかります。 コマンドラインユーティリティ。 Let’s Encrypt CA証明書の追加情報を表示するには、Linuxコンソールで次のコマンドを実行します。

 openssl s_client –connect www.yourdomain.com:443 

自動更新Let’sEncrypt証明書

Let’s Encrypt CAによって発行された証明書を有効期限前に自動的に更新するには、次のコマンドを発行して、crontabジョブを1日1回午前2時に実行するようにスケジュールします。実行されたcronジョブの出力は、/var/log/letsencrypt.log

に保存されているログファイルに送信されます。
 crontab –e 

証明書を更新するためのcronジョブ。

  0 2 * * *  certbotの更新>>/var/log/letsencrypt.log 

それで全部です! Let’s Encryptの証明書とユーティリティに関するその他のより高度な構成については、次のインターネットアドレスhttps://certbot.eff.org/docs/の公式ドキュメントにアクセスしてください。


Debian
  1. Debian9でLetsEncryptを使用してNginxを保護する

  2. Debian10LinuxでLetsEncryptを使用してNginxを保護する

  3. Debian10でLetsEncryptを使用してApacheを保護する

  1. Nginxを使用してAutomadCMSをインストールし、Debian10でSSLを暗号化できるようにします

  2. Nginxを使用してOpenCartをインストールし、Debian10で暗号化する方法

  3. Drupal 9をNginxでインストールし、Debian10でSSLを暗号化する方法

  1. ApacheでJoomlaをインストールし、Debian10でSSLを暗号化する方法

  2. DrupalをApacheでインストールし、Debian11でSSLを暗号化する方法

  3. TaskBoardをApacheとともにインストールし、Debian11でSSLを暗号化できるようにします