CentOS8でLet'sEncryptを使用してApacheを保護する

Let's Encryptは、無料の自動のオープンな証明書プロバイダーです。これは、無料の[SSL証明書](https://cloud.tencent.com/product/symantecssl?from=10680)を提供するインターネットセキュリティ研究グループ(ISRG)によって開発されました。

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

このガイドでは、ApacheWebサーバーを実行しているCentOS8に無料のLet'sEncryptSSl証明書をインストールする方法について説明します。 certbotを使用して、証明書を取得して更新します。

1.前提条件##

次の手順に進む前に、次の前提条件を確認してください。

SSL暗号化Webサーバーを構成するために必要な次のパッケージをインストールします。

sudo dnf install mod_ssl openssl

mod_sslパッケージをインストールすると、ローカルホストの自己署名キーと証明書が作成されているはずです。これらのファイルが自動的に作成されない場合は、 opensslコマンドを使用して作成できます。

sudo openssl req -newkey rsa:4096-x509 -sha256 -days 3650-nodes \
- out /etc/pki/tls/certs/localhost.crt \
- keyout /etc/pki/tls/private/localhost.key

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

Certbotは、Let's Encrypt SSL証明書の取得と更新のプロセスを簡素化し、サーバーのHTTPSを自動的に有効にすることができるターミナルコマンドツールです。

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

次の wgetコマンドをrootユーザーまたはsudo権限を持つ別のユーザーとして実行して、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分以上かかる場合があります。

第四に、Let's EncryptSSL証明書を取得します##

ドメイン名のSSL証明書を取得するには、最初にWeBrootプラグインを使用して一時ファイルを作成し、 $ {webroot-path} /。well-known / acme-challengeディレクトリにドメイン名を確認する必要があります。 Let's Encryptサーバーは、ドメイン名を確認するためにこの一時ファイルを要求します。

手順を簡単にするために、 .well-known / acme-challengeのすべてのHTTPリクエストを単純なフォルダー / var / lib / letsencryptに入れます。

次のコマンドを実行してフォルダを作成し、Apacheサーバーで書き込み可能にします。

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

コードの重複を回避し、構成を保守可能にするには、次の2つの構成コードスニペットを作成します。

/etc/httpd/conf.d/letsencrypt.conf

Alias /.well-known/acme-challenge/"/var/lib/letsencrypt/.well-known/acme-challenge/"<Directory "/var/lib/letsencrypt/">
 AllowOverride None
 Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
 Require method GET POST OPTIONS
< /Directory>

/etc/httpd/conf.d/ssl-params.conf

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM
# Requires Apache 2.4.36& OpenSSL 1.1.1
SSLProtocol -all +TLSv1.3+TLSv1.2
SSLOpenSSLConfCmd Curves X25519:secp521r1:secp384r1:prime256v1
# Older versions
# SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >=2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >=2.4.11
SSLSessionTickets Off

SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"

上記のコードスニペットは、[Cipherli.st](https://cipherli.st/)が推奨する暗号化構成を使用しています。これにより、OCSP、HTTP Strict Transport Security(HSTS)、Dhキー、およびセキュリティに重点を置いたいくつかのHTTPヘッダーの必須の追加が可能になります。

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

sudo systemctl reload httpd

これで、webrootプラグインを使用してcertbotスクリプトを実行し、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は次の情報を出力します。

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-01-26. 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"- Your account credentials have been saved in your Certbot
 configuration directory at /etc/letsencrypt. You should make a
 secure backup ofthis folder now. This configuration directory will
 also contain certificates and private keys obtained by Certbot so
 making regular backups ofthis 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

すべての設定が完了したので、ドメイン名に対応する仮想ホスト構成を次のように編集します。

/etc/httpd/conf.d/example.com.conf

< VirtualHost *:80>
 ServerName example.com
 ServerAlias www.example.com

 Redirect permanent / https://example.com/</VirtualHost><VirtualHost *:443>
 ServerName example.com
 ServerAlias www.example.com

 Protocols h2 http:/1.1<If "%{HTTP_HOST} == 'www.example.com'">
 Redirect permanent / https://example.com/</If>

 DocumentRoot /var/www/example.com/public_html
 ErrorLog /var/log/httpd/example.com-error.log
 CustomLog /var/log/httpd/example.com-access.log combined

 SSLEngine On
 SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

 # Other Apache Configuration

< /VirtualHost>

上記の構成では、HTTPSを強制的に使用し、wwwをwww以外のバージョンに強制的に切り替えます。また、HTTP / 2が有効になり、Webサイトをより高速かつ強力にすることができます。必要に応じて、構成ファイルを自由に変更できます。

Apacheサービスを再起動します。

sudo systemctl restart httpd

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

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

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

Let'sEncryptの証明書は90日間のみ有効です。有効期限が切れる前に証明書を自動的に更新するには、1日に2回実行されるcronジョブを作成し、証明書の有効期限が切れる約30日前に証明書を更新する必要があります。

次のコマンドを実行して、新しいcronjobを作成します。これにより、証明書が更新され、Apacheが再起動されます。

echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto -q renew --renew-hook \"systemctl reload httpd\""| sudo tee -a /etc/crontab >/dev/null

更新プロセスをテストするには、 --dry-runオプションを指定してcertbotコマンドを使用します。

sudo /usr/local/bin/certbot-auto renew --dry-run

エラーメッセージがない場合は、更新プロセスが成功したことを意味します。

6、要約##

このガイドでは、CentOSでLet's Encryptクライアントcertbotを使用して、ドメイン名のSSL証明書を取得する方法について説明しました。また、Apacheを構成し、証明書を使用し、証明書を更新するためのcronjob定期タスクを設定する方法も学習しました。

Certbotスクリプトの詳細については、[Certbot公式ドキュメント](https://certbot.eff.org/docs/)を参照してください。

Recommended Posts

CentOS8でLet&#39;sEncryptを使用してApacheを保護する
Ubuntu20.04でLet&#39;sEncryptを使用してApacheを保護する
Ubuntu16.04でLet&#39;sEncryptを使用してApacheを保護する方法
Let&#39;sEncryptを使用してCentOS8でNginxを保護する方法
CentOSにCaddyを使用してWordPressをインストールする
CentOS8にApacheをインストールする方法
CentOS8にApacheMavenをインストールする方法
MacOSでVirtualboxを使用してCentOSネットワークをセットアップする
CentOS8でVsftpdを使用してFTPサーバーを構成する方法
CentOS8でVsftpdを使用してFTPサーバーを構成する方法
Centos7にDockerをインストールする
Centos7.4はLNMPをインストールします
centos7でk8s1.9.9をビルドする
Centos7にJavaをインストールする
centos7でのXfs構成
CentOS6でOcservを構成する
Nodejsはcentos7にインストールされます
CentOS8にFFmpegをインストールします
CentOS7にRabbitMQをインストールします
CentosにNode.jsをインストールします
CentOS 8ApacheはSSLを有効にします
Mavenはcentos7にインストールします
CentOS7にMongoDBをインストールします
ジェンキンスはセントスに基づいて構築されています
CentOS8にSurelogをインストールする
centos7にvuepressをデプロイする
centos7へのOpenjdkのインストール
Jenkinsをcentos7にインストールします
CentOS7でRapidSVNを使用する
セントスにRabbitMQをインストールする
CentOS7にRabbitMQをインストールします
centos6.5にDockerをインストールします
セントスにオラクルをインストールする
Centos7にElasticsearch6をインストールします
CentOS7にRabbitMQをインストールします
Jenkinをcentos7にデプロイします
CentOS7でApache仮想ホストを設定する方法