Let'sEncryptを使用してCentOS8でNginxを保護する方法

Let's Encryptは、Internet Security Research Group(ISRG)によって開発された、無料の自動オープンソース証明書プロバイダーです。

Let's Encryptによって発行された証明書は、すべての主要なブラウザーによって信頼されており、発行日から90日間有効です。

このガイドでは、NginxWebブラウザを実行しているCentOS8システムに無料のLet'sEncrypt [SSL証明書](https://cloud.tencent.com/product/symantecssl?from=10680)をインストールする方法を段階的に説明します。 SSL証明書を使用してHTTP / 2を有効にするようにNginxを構成する方法を示します。

1.前提条件##

開始する前に、次の前提条件を満たしていることを確認してください。

2つ目は、Certbotをインストールする##

Certbotは、Let's Encryptの取得と更新のプロセスを簡素化し、サーバーでHTTPSを自動的に有効にする無料のコマンドラインツールです。

certbotパッケージは、CentOS 8標準ソフトウェアソースリポジトリには含まれていませんが、ベンダーのWebサイトからダウンロードできます。

rootまたはsudo権限を持つ別のユーザーとして、 wgetを使用してcertbotスクリプトを / usr / local / binディレクトリにダウンロードします。

sudo wget -P /usr/local/bin https://dl.eff.org/certbot-auto

ダウンロードが完了したら、ファイルを実行可能にします。

sudo chmod +x /usr/local/bin/certbot-auto

3つ目は、強力なDh(Diffie-Hellman)グループを生成する##

Diffie–Hellmanキー交換(DH)は、安全でない通信チャネルで秘密キーを安全に交換する方法です。

次のコマンドを入力して、2048ビットのDHパラメータを生成します。

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

必要に応じて、キーの長さを4096ビットに増やすことができますが、システムエントロピーによっては、生成プロセスに30分以上かかります。

第四に、SSL証明書を暗号化しましょう##

ドメイン名SSL証明書を取得するには、Webrootプラグインを使用します。このプラグインは、証明書を要求するドメイン名を確認するための一時ファイルを $ {webroot-path} /。well-known / acme-challengeディレクトリに作成します。 Let's Encryptサーバーは、HTTP要求を開始してこの一時ファイルを要求し、要求されたドメイン名がcerbotを実行しているサーバーを指していることを確認します。

プロセスを簡単にするために、 .well-known / acme-challengeに対するすべてのHTTPリクエストをディレクトリ / var / lib / letsencryptにマップします。

次のコマンドは、ディレクトリを作成し、Nginxサーバーに書き込みます。

sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp nginx /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt

コードの重複を避けるために、次の2つのコードスニペットを作成します。これらはNginxサーバー構成ブロックに含まれます。

sudo mkdir /etc/nginx/snippets

/etc/nginx/snippets/letsencrypt.conf

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

/etc/nginx/snippets/ssl.conf

ssl_dhparam /etc/ssl/certs/dhparam.pem;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.88.8.4.4 valid=300s;
resolver_timeout 30s;

add_header Strict-Transport-Security "max-age=63072000" always;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;

暗号化を含む上記のコードスニペットは、Mozillaによって推奨されています。OCSPステープリング、HTTP Strict Transport Security(HSTS)が有効になっており、セキュリティ関連のHTTPヘッダーが必須です。

これらのコードスニペットが作成されたら、次のように、 letsencrypt.confファイルでドメインネームサーバー構成ブロックを開きます。

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

 include snippets/letsencrypt.conf;}

Nginx構成をリロードして、変更を有効にします。

sudo systemctl reload nginx

certおよびwebrootプラグインを実行して、ドメイン名のSSL証明書を取得します。

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

初めて certbotを実行すると、このツールはいくつかの欠落している依存関係をインストールします。

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 2020-03-12. To obtain a newor tweaked
 version ofthis certificate in the future, simply run certbot-auto
 again. To non-interactively renew *all*of your certificates, run
 " certbot-auto 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

証明書を取得したので、次のようにドメイン名サーバーのコードブロックを編集できます。

/etc/nginx/conf.d/example.com.conf

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

 include snippets/letsencrypt.conf;return301 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;return301 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

ここで、 https://を使用してWebサイトを開くと、緑色の鍵のアイコンが表示されます。

[SSL Labs Server Test](https://www.ssllabs.com/ssltest/)Webサイトを使用してドメイン名をテストすると、次の画像のように「A +」レベルが得られます。

5.SSL証明書を自動的に更新しましょう##

Let'sEncryptの証明書は90日間有効です。証明書の有効期限が切れる前に証明書を自動的に更新するには、cornjobを作成し、1日2回実行して、有効期限の約30日前のドメイン名証明書を自動的に更新します。

corntabコマンドを使用して、新しいcronjobを作成します。

sudo crontab -e

次のコンテンツを貼り付けます。

0* /12*** root test -x /usr/local/bin/certbot-auto -a \!-d /run/systemd/system && perl -e 'sleep int(rand(3600))'&&/usr/local/bin/certbot-auto -q renew --renew-hook "systemctl reload nginx"

ファイルを保存して閉じます。

更新プロセスをテストするには、certbotコマンドに加えて --dry-runを使用できます。

sudo certbot renew --dry-run

エラーがない場合は、更新プロセスが正常に実行されたことを意味します。

6、要約##

この記事では、Let'sEncryptクライアントのcertbotを使用してドメイン名のSSL証明書をダウンロードする方法を説明しました。また、コードの重複を避けるためにNginxコードスニペットを作成し、証明書を使用するようにNginxを構成します。記事の最後に、証明書を定期的に更新するcronjobを作成しました。

Certbotの詳細については、https://certbot.eff.org/docs/にアクセスしてください。

Recommended Posts

Let'sEncryptを使用してCentOS8でNginxを保護する方法
Ubuntu16.04でLet'sEncryptを使用してApacheを保護する方法
CentOS8にNginxをインストールする方法
CentOS8でLet'sEncryptを使用してApacheを保護する
CentOS7にDockerをインストールして使用する方法
CentOS8にComposerをインストールして使用する方法
CentOS8にCurlをインストールして使用する方法
CentOS 8 / RHEL8にCockpitをインストールして使用する方法
centOS7にjdk1.8をインストールする方法
CentOS8にMySQLをインストールする方法
CentOS8にMemcachedをインストールする方法
CentOS8にRをインストールする方法
CentOS8にVirtualboxをインストールする方法
Ubuntu20.04にNginxをインストールする方法
CentOS8にTensorFlowをインストールする方法
CentOS8にTeamViewerをインストールする方法
CentOSにPerl5をインストールする方法
CentOS8にGitをインストールする方法
CentOS8にGradleをインストールする方法
CentOS8にElasticsearchをインストールする方法
CentOS8にJavaをインストールする方法
CentOS8にGoをインストールする方法
CentOS8にGCCをインストールする方法
CentOS8にYarnをインストールする方法
CentOS7にAsteriskをインストールする方法
CentOS8にJenkinsをインストールする方法
CentOS8にVagrantをインストールする方法
CentOS8にPython3.8をインストールする方法
CentOS8にTomcat9をインストールする方法
CentOS8にWebminをインストールする方法
CentOS8にRubyをインストールする方法
CentOS8にSkypeをインストールする方法
CentOS8にhtopをインストールする方法
CentOS8にElasticsearchをインストールする方法
CentOS8にPostgresqlをインストールする方法
CentosにWordpressをインストールする方法
Ubuntu20.04にNginxをインストールする方法
CentOS8にTeamViewerをインストールする方法
CentOS7にスワップを追加する方法
Ubuntu16.04にNginxをインストールする方法
CentOS7にMongoDBをインストールする方法
CentOS8にOdoo13をインストールする方法
CentOS8でSELinuxを無効にする方法
CentOS8にOpenCVをインストールする方法
CentOS8にPHPをインストールする方法
CentOS8にMongoDBをインストールする方法
Ubuntu20.04でLet'sEncryptを使用してApacheを保護する
CentOS8でスワップスペースを増やす方法
CentOS8にApacheMavenをインストールする方法
CentOS7にApacheKafkaをインストールする方法
Ubuntu16.04でSambaサーバーを使用する方法
[グラフィック]セントスにtomcatをインストールする方法
R&D:CentOS7にPython3をインストールする方法
CentOS8でNginxサーバー構成ブロックを設定する方法
CentOS7にGCCコンパイラをインストールする方法
CentOS8でホスト名を変更する方法
centos7.0にオフラインJDK1.8をインストールする方法
CentOS7にElasticsearchをインストールして構成する方法
CentOS8にVisualStudioコードをインストールする方法
CentOSでNginxサーバーをすばやく構築する方法
CentOSLinuxにRPMパッケージをインストールする方法