Let’s EncryptでSSL証明書を発行する(webサイトのhttps化)

Last update: 2024/2/15


実行環境

前提条件

Let's Encryptをインストールする

※注意:インストールしてから知ったが、現在はSnapを使ったインストールが推奨されている模様。

まずはApacheのSSLモジュールをインストールする。

$ sudo dnf install mod_ssl

インストールしたモジュールは、httpd -Mで確認することができる。

$ httpd -M | grep ssl_module
 ssl_module (shared)

この状態でLet's Encryptをインストールする。

$ sudo dnf install certbot python3-certbot-apache

インストールが完了したら、自分の独自ドメインを-dオプションで設定して実行する。

$ certbot --apache -d 独自ドメイン

実行すると以下を聞かれるので、入力していく。

しかしここで以下のようなエラーが発生。

Unable to find a virtual host listening on port 80 which is currently needed for Certbot to prove to the CA that you control your domain. Please add a virtual host for port 80.

参考文献で書かれている方法を参考にし、Apacehの設定ファイル/etc/httpd/conf/httpd.confをroot権限でエディタで開き、ファイルの最後に以下を追加して保存する。ServerAdminとServerNameの部分は自分の独自ドメインを入れる。

NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin root@独自ドメイン
DocumentRoot /var/www/html
ServerName 独自ドメイン
</VirtualHost>

これで以下を再実行したところ無事に設定が完了して、Webサイトもhttpsでアクセスできるようになった。

$ certbot --apache -d computer-sandbox.net

cronでSSL証明書を自動で更新する

Let's Encryptで発行したSSL証明書は90日で有効期限が切れてしまう。証明書を更新するには以下を実行すればよい。

$sudo certbot renew

ただ、手動で更新するのは手間なので、cronで自動実行されるようにしておく。やり方は色々あるが、sudo crontab -eでrootのcrontabを編集し、以下を追加した。

0 3 * * * /usr/bin/certbot renew --deploy-hook "systemctl reload httpd"

内容としては毎日午前3時にcertbot renewを実行し、証明書が更新された場合はApacheをreloadするようにしている。

参考文献

ネコでもわかる!さくらのVPS講座 ~第六回「無料SSL証明書 Let’s Encryptを導入しよう」 | さくらのナレッジ


Copyright (c) 2024 kd