Nginx 用の Let’s Encrypt SSL 証明書を RHEL 9/8 にインストールする
この記事では、RHEL 上で Nginx Web サーバーの HTTP トランザクションを保護するために使用する、Let's Encrypt 認証局から無料で取得した SSL/TLS 証明書を生成してインストールする方法を説明します。 Fedora、Rocky Linux、AlmaLinuxなどの RHEL ベースのディストリビューション。
RHEL および RHEL ベースのディストリビューションに Apache 用のLet’s Encrypt をインストールする場合は、以下のガイドに従ってください。
要件
- サーバーのパブリック IP アドレスを指す、有効な
A
DNS レコードを持つ登録済みのドメイン名。 - SSL が有効になり、仮想ホストが有効になった状態でインストールされた Nginx Web サーバー (複数のドメインまたはサブドメインのホスティングのみ)。
テスト環境のセットアップ
ステップ 1: RHEL システムに Nginx Web サーバーをインストールする
1. 最初のステップでは、Nginx デーモンがまだインストールされていない場合は、root 権限で以下のコマンドを発行して、Epel リポジトリから Nginx ウェブサーバーをインストールします。
------------- On RHEL, Rocky & AlmaLinux 9 -------------
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
------------- On RHEL, Rocky & AlmaLinux 8 -------------
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
------------- Install Nginx Web Server -------------
yum install nginx
注: Fedora ユーザーは epel リポジトリをインストールする必要はありません。
ステップ 2: RHEL システムに Let’s Encrypt (Certbot) をインストールする
2. Linux システムに Let's Encrypt クライアントをインストールする最も速い方法は、epel リポジトリから certbot および python3-certbot-nginx パッケージをインストールすることです。 。
dnf install certbot python3-certbot-nginx
3. certbot クライアントがインストールされたら、以下のコマンドを実行して、インストールされている Let’s Encrypt ソフトウェアのバージョンを確認します。
certbot --version
certbot 1.30.0
ステップ 3: Nginx 用の無料の Let’s Encrypt SSL 証明書を取得する
4. Nginx 用の無料の SSL/TLS 証明書を取得するプロセスは、Let's Encrypt Standalone を使用して手動で行われます。 >プラグイン。
この方法では、Let's Encrypt クライアントがサーバーの ID を検証して証明書を生成する間、ポート 80 が空いている必要があります。
したがって、Nginx がすでに実行されている場合は、次のコマンドでデーモンを停止し、ss ユーティリティを実行して、ポート 80 がネットワーク スタックで使用されていないことを確認します。
service nginx stop
systemctl stop nginx
ss -tln
5. 次に、--nginx
certbot コマンドを実行して、Let's Encrypt から無料の SSL 証明書を取得します。 > Nginx ドメインの Let's Encrypt セキュリティ証明書の取得と構成を初期化します。
certbot --nginx
Or
certbot --nginx -d example.com -d www.example.com
6. 最後に、すべてが順調に進むと、bash ターミナルにお祝いの情報メッセージが表示されます。このメッセージは、証明書の有効期限が切れるときにも表示されます。
ステップ 4: Let’s Encrypt SSL 証明書を Nginx にインストールする
9. 無料のSSL/TLS 証明書を所有したので、ドメインで使用できるように Nginx Web サーバーに証明書をインストールします。
すべての新しい SSL 証明書は、ドメイン名にちなんで名付けられたディレクトリの下の /etc/letsencrypt/live/
に配置されます。 ls コマンドを使用して、ドメインに対して発行された証明書ファイルを一覧表示し、それらを識別します。
sudo ls /etc/letsencrypt/live/
sudo ls -al /etc/letsencrypt/live/your_domain.tld
10. Nginx に証明書ファイルをインストールして SSL を有効にするには、/etc/nginx/nginx.conf
ファイルを開いて編集し、最後の listen 行の後に以下のステートメントを追加します。サーバーブロック。以下の図をガイドとして使用してください。
vi /etc/nginx/nginx.conf
Nginx SSL ブロックの抜粋:
SSL configuration
listen 443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/your_domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain.tld/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
SSL 証明書のドメイン名文字列を独自のドメインと一致するように置き換えます。
11. 最後に、Nginx サービスを再起動し、HTTPS プロトコル経由で https://yourdomain
のドメインにアクセスします。ページは証明書エラーなくスムーズに読み込まれるはずです。
systemctl restart nginx
service nginx restart
12. SSL/TLS 証明書とその正確性を確認するには、次のリンクにアクセスしてください。
https://www.ssllabs.com/ssltest/analyze.html
13. サーバーが弱い DH キー交換をサポートし、全体的な評価が B グレードであるという通知を受け取った場合は、新しい <次のコマンドを実行して、/etc/nginx/ssl/ ディレクトリにstrong>Diffie-Hellman 暗号を追加し、 サーバーをログジャム攻撃から保護します。
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
openssl dhparam -out dhparams.pem 4096
この例では4096 ビットのキーを使用していますが、実際には生成に時間がかかり、サーバーと SSL ハンドシェイクに余分なオーバーヘッドがかかります。
これほど長いキーを使用する明示的な必要がなく、神経質にならない場合は、2048 ビットのキーを使用しても安全です。
14. DH キーが生成されたら、Nginx 構成ファイルを開き、ssl_ciphers
行の後に次のステートメントを追加して、DH キーとドメインのセキュリティ レベルを A+
グレードに引き上げます。
vi /etc/nginx/nginx.conf
次のブロックの抜粋を Nginx.conf に追加します。
ssl_dhparam /etc/nginx/ssl/dhparams.pem;
ssl_session_timeout 30m;
ssl_session_cache shared:SSL:10m;
ssl_buffer_size 8k;
add_header Strict-Transport-Security max-age=31536000;
15. Nginx サービスを再起動して変更を適用し、上記のリンクから以前の結果キャッシュをクリアして SSL 証明書を再テストします。
systemctl restart nginx
service nginx restart
ステップ 5: Nginx Free の自動更新で SSL 証明書を暗号化できる
16. Let’s Encrypt CA は、90 日間有効な無料の SSL/TLS 証明書をリリースします。以下のコマンドを実行すると、Webroot プラグインを使用して、Web サーバーを停止することなく証明書を手動で更新し、有効期限が切れる前に適用できます。
certbot --nginx -d example.com -d www.example.com
systemctl reload nginx
上記のコマンドを実行するときは、example.com
をドメインと一致するように置き換えてください。
17. 証明書の有効期限が切れる前に自動更新するには、既存の crontab ファイルに cron ジョブを作成します。
crontab -e
次の cron ジョブをファイルの最後に追加します。この cron ジョブは毎日正午に実行され、証明書の有効期限を確認して更新します。 --quiet
オプションは、certbot に出力を生成しないように指示します。
0 12 * * * /usr/bin/certbot renew --quiet
それだけです! Nginx サーバーは、無料の SSL/TLS Let’s Encrypt 証明書を使用して安全な Web コンテンツを Web サイトに配信できるようになりました。