Let's Encryptは、無料の自動のオープンな証明書プロバイダーです。これは、無料の[SSL証明書](https://cloud.tencent.com/product/symantecssl?from=10680)を提供するインターネットセキュリティ研究グループ(ISRG)によって開発されました。
Let's Encryptによって発行された証明書は、ほとんどのブラウザーで信頼されており、発行日から90日間有効です。
このガイドでは、ApacheWebサーバーを実行しているCentOS8に無料のLet'sEncryptSSl証明書をインストールする方法について説明します。 certbotを使用して、証明書を取得して更新します。
次の手順に進む前に、次の前提条件を確認してください。
example.com
を使用します。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
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
Diffie–Hellmanキー(DH)は、安全でない通信チャネルでパスワードを安全に交換するためのスキームです。安全性を高めるために2048ビットのDH係数を生成します。
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
サイズを4096ビットに増やすことができますが、システムエントロピーによっては、生成プロセスに30分以上かかる場合があります。
ドメイン名の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 +レベルが得られます。
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
エラーメッセージがない場合は、更新プロセスが成功したことを意味します。
このガイドでは、CentOSでLet's Encryptクライアントcertbotを使用して、ドメイン名のSSL証明書を取得する方法について説明しました。また、Apacheを構成し、証明書を使用し、証明書を更新するためのcronjob定期タスクを設定する方法も学習しました。
Certbotスクリプトの詳細については、[Certbot公式ドキュメント](https://certbot.eff.org/docs/)を参照してください。
Recommended Posts