Let’s Encryptの導入方法(Webroot版)
前提
書くこと/書かないこと
フリーで自動化されたオープンな認証局であるLet’s Encryptが発行するSSL証明書の導入方法を説明します。
Let’s Encryptの導入方法としては、既にドメインが取得済みで外部からアクセスできるWebサーバが起動していることを前提としたwebrootとWebサーバがなくても外部からアクセスできれば利用できるstandaloneの二つの方法があります。今回はwebrootを使った導入方法について記載します。
環境
AlmaLinux 8.6 ※CentOS8代替OS
さくっと
epelの有効化~certbotのインストールまで
let’s encryptを使うためにはacmeクライアントが必要となります。今回はその中でも有名なcertbotを使用します。
certbotはepelから入手できるため、epelを有効化していない場合は先にepelを有効にします。
dnf install epel-release
epelを有効にしたら次はcertbotをインストールします。
dnf install certbot
今回は、certbot-1.22.0-1.el8.noarchがインストールされました。
証明書ファイルの作成・取得
certbotを使って証明書を作成・取得します。ちなみに今回はwebrootという方法を使いますが、これを利用するためにはいくつかの前提条件があります。
- apacheやnginxなどのwebサーバが起動していること
- port 80, 443が開いており、サーバにインターネットからアクセスできる状態になっていること
- DNSの設定が終わっており、FQDNでサーバにアクセスができること
上記が満たされていることを確認したら、certbotを実行します。
certbot certonly -d {FQDN} -w {DocumentRoot} --email {email}
{FQDN} ・・・ドメイン名
{DocumentRoot} ・・・webサーバで設定したルートディレクトリまでのフルパス
{email} ・・・メールアドレス
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Account registered.
Requesting a certificate for {FQDN}
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/{FQDN}/fullchain.pem
Key is saved at: /etc/letsencrypt/live/{FQDN}/privkey.pem
This certificate expires on 2022-08-25.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
“Successfully received certificate."と表示されましたのでインストールできました。
証明書と秘密鍵は /etc/letsencrypt/live/{FQDN}/ に保存されています。
証明書と秘密鍵のアクセス権変更~Webサーバへの組み込み
証明書と秘密鍵が作られたディレクトリはcertbotを実行したユーザの所有になっていますので、Webサーバが読み取れるようにアクセス権を変更します。今回はapacheに組み込むのでユーザとグループをapacheに変更します。
chown apache:apache -R /etc/letsencrypt/live/{FQDN}/
次はapacheへの組み込みです。
まずはmod_sslが有効になっているか確認します。
httpd -M | grep ssl
ssl_module (shared)が得られれば有効になっています。
もしモジュールが見つからなかった場合はインストールします。
dnf install mod_ssl
mod_sslが有効になっていることを確認したらconfファイルを更新します。
<VirtualHost _default_:443>
(省略)
SSLCertificateFile /etc/letsencrypt/live/{FQDN}/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/{FQDN}/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/{FQDN}/chain.pem
(省略)
</VirtualHost>
設定が済んだらapacheを再起動します。
systemctl restart httpd.service
ここまでで、httpsでアクセスできるようになります。
証明書の自動更新対応
let’s encryptの証明書は有効期間が3か月しかないため、このままだと3か月ごとに証明書を更新する作業を行わなければなりません。これを避けるために、自動更新のスクリプトを仕込みます。
ファイル名や保存場所は任意の場所で大丈夫ですが、ファイルに下記を記述して保存します。
#!/bin/sh
certbot renew -q --no-self-upgrade --post-hook "systemctl restart httpd.service"
ファイルに実行権限を付与します。
chmod 0700 /etc/letsencrypt/auto-renewal.sh
最後にcronの設定をして上記スクリプトを定期実行します。
crontab -e
0 3 * * * /etc/letsencrypt/auto-renewal.sh
これで毎日3時にスクリプトが実行され、期限が近づくと証明書が自動更新されるようになります。
こってりと
時間とができてやる気が出たら加筆します(しないかも)。
ディスカッション
コメント一覧
まだ、コメントがありません