Let's Encryptは、無料の自動のオープンな証明書プロバイダーです。これは、無料の[SSL証明書](https://cloud.tencent.com/product/symantecssl?from=10680)を提供するインターネットセキュリティ研究グループ(ISRG)によって開発されました。
Let's Encryptによって発行された証明書は、ほとんどのブラウザーで信頼されており、発行日から90日間有効です。
このガイドでは、ApacheWebサーバーを実行しているUbuntu20.04に無料のLet'sEncryptSSl証明書をインストールする方法について説明します。また、SSL証明書を使用してHTTP / 2を有効にするようにApacheを構成する方法も示します。
次の手順に進む前に、次の前提条件を確認してください。
example.com
を使用します。certbotを使用して証明書を取得します。これは、Let's EncryptSSL証明書の取得と更新のタスクを自動化するために使用されるコマンドラインツールです。
certbotパッケージは、デフォルトのUbuntuソフトウェアソースに含まれています。次のコマンドを使用して、パッケージリストをアップグレードし、cerbotをインストールします。
sudo apt update
sudo apt install certbot
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サーバーは、ドメイン名を確認するためにこの一時ファイルを要求します。 Let's Encryptサーバーは、HTTP要求を一時ファイルに送信して、ドメイン名が指すサーバーがcerbotが実行するサーバーであることを確認します。
手順を簡単にするために、 .well-known / acme-challenge
のすべてのHTTPリクエストを単純なフォルダー / var / lib / letsencrypt
に入れます。
次のコマンドを実行してフォルダを作成し、Apacheサーバーで書き込み可能にします。
sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp www-data /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt
コードの重複を回避し、構成を保守可能にするには、次の2つの構成コードスニペットを作成します。
/etc/apache2/conf-available/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/apache2/conf-available/ssl-params.conf
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite 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
SSLHonorCipherOrder off
SSLSessionTickets off
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
Header always set Strict-Transport-Security "max-age=63072000"
上記のコードスニペットは、[Mozilla](https://ssl-config.mozilla.org/)が推奨する暗号化構成を使用しています。これにより、OCSP、HTTP Strict Transport Security(HSTS)、Dhキー、およびセキュリティに重点を置いたいくつかのHTTPヘッダーの必須の追加が可能になります。
構成ファイルを有効にする前に、 mod_ssl
と mod_headers
が有効になっていることを確認してください。
sudo a2enmod ssl
sudo a2enmod headers
次に、次のコマンドを使用してSSL構成ファイルを有効にします。
sudo a2enconf letsencrypt
sudo a2enconf ssl-params
HTTP / 2モジュールを有効にすると、Webサイトがより高速で堅牢になります。
sudo a2enmod http2
Apache構成をリロードして、変更を有効にします。
sudo systemctl reload apache2
これで、webrootプラグインを使用してCertbotツールを実行し、SSL証明書ファイルを取得できます。
sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/-d example.com -d www.example.com
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-10-06. To obtain a newor tweaked
version ofthis certificate in the future, simply run certbot
again. To non-interactively renew *all*of your certificates, run
" certbot 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 / apache2 / sites-available / example.com.conf
< VirtualHost *:80>
ServerName mail.digital.mk
Redirect permanent / https://mail.digital.mk/</VirtualHost><VirtualHost *:443>
ServerName mail.digital.mk
Protocols h2 http:/1.1<If "%{HTTP_HOST} == 'www.mail.digital.mk'">
Redirect permanent / https://mail.digital.mk/</If>
DocumentRoot /var/www/mail.digital.mk/public_html
ErrorLog ${APACHE_LOG_DIR}/mail.digital.mk-error.log
CustomLog ${APACHE_LOG_DIR}/mail.digital.mk-access.log combined
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/mail.digital.mk/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mail.digital.mk/privkey.pem
# Other Apache Configuration
< /VirtualHost>
上記の構成では、HTTPSを強制的に使用し、wwwをwww以外のバージョンに強制的に切り替えます。必要に応じて、構成ファイルを自由に変更できます。
Apache構成をリロードして、変更を有効にします。
sudo systemctl reload apache2
これで、 https://
を使用してWebサイトを開くことができ、緑色のロックアイコンが表示されます。
[SSL Labs Server Test](https://www.ssllabs.com/ssltest/)を使用してドメイン名をテストすると、次のようなA +レベルが得られます。
Let'sEncryptの証明書は90日間のみ有効です。有効期限が切れる前に証明書を自動的に更新するには、1日に2回実行されるcronジョブを作成し、証明書の有効期限が切れる約30日前に証明書を更新する必要があります。
証明書が更新されたら、Apacheサービスをリロードする必要があります。 --renew-hook" systemctl reloadapache2 "
を / etc / cron.d / certbot
ファイルに追加します。これは次のようになります。
次のコマンドを実行して、新しいcronjobを作成します。これにより、証明書が更新され、Apacheが再起動されます。
0* /12*** root test -x /usr/bin/certbot -a \!-d /run/systemd/system && perl -e 'sleep int(rand(3600))'&& certbot -q renew --renew-hook "systemctl reload apache2"
更新プロセスをテストするには、 --dry-run
オプションを指定してcertbotコマンドを使用します。
sudo certbot renew --dry-run
エラーメッセージがない場合は、更新プロセスが成功したことを意味します。
このガイドでは、Ubuntu20.04でLet'sEncryptクライアントcertbotを使用して、ドメイン名のSSL証明書を取得する方法について説明しました。
SSL証明書を使用するようにApacheを構成し、証明書を自動的に更新するcronjobを設定する方法を示しました。
Certbotスクリプトの詳細については、[Certbot公式ドキュメント](https://certbot.eff.org/docs/)を参照してください。
Recommended Posts