環境 CentOS Stream release 9 Apache/2.4.57 (CentOS Stream) Xserver VPS
EPELインストール
dnf install epel-release
Snapインストール
dnf --enablerepo=epel install snapd
snapd 起動と自動起動設定
systemctl enable --now snapd.socket
シンボリックリンク作成
ln -s /var/lib/snapd/snap /snap
core パッケージをインストール
snap install core
certbotインストール
snap install --classic certbot
シンボリックリンクを作成
ln -s /snap/bin/certbot /usr/bin/certbot
certbotコマンドでLet’s Encrypt証明書を取得してhttpsでサイトにアクセスできるようにする解説。
対象サイトはmysite.comで/etc/httpd/conf.d/mysite.com.confのようにmysite.com用の独自confファイルが既に設置してあり下記の内容になっているのが前提。
<VirtualHost *:80> ServerName mysite.com DocumentRoot /var/www/html/mysite # for Let's Encrypt Alias /.well-known /var/www/html/mysite/.well-known <Directory /var/www/html/mysite AllowOverride All Require all granted </Directory> </VirtualHost>
certbotコマンドで証明書を取得する
certbot certonly --webroot -w /var/www/html/mysite.com -d mysite.com -m info@mysite.com --agree-tos
Saving debug log to /var/log/letsencrypt/letsencrypt.log Requesting a certificate for mysite.com Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/mysite.com/fullchain.pem Key is saved at: /etc/letsencrypt/live/mysite.com/privkey.pem This certificate expires on 2025-01-21. 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
上記のように表示されればOK。
あとはfullchain.pemとprivkey.pemのパスをssl.confで指定する。
vi /etc/httpd/conf.d/ssl.conf
↓記述内容
<VirtualHost *:443> ServerName mysite.com DocumentRoot "/var/www/html/mysite" SSLEngine on SSLProtocol All -SSLv2 -SSLv3 -TLSv1 SSLCertificateFile /etc/letsencrypt/live/mysite.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/mysite.com/privkey.pem <Directory "/var/www/html/mysite"> AllowOverride All Require all granted </Directory> ErrorLog logs/mysite-ssl_error_log CustomLog logs/mysite-ssl_access_log combined </VirtualHost>
あとはブラウザでhttps://mysite.comにアクセスできれば完了。
Apache2.4.7未満は下記のように記述するとの説もあるがApache2.4.57であっても上記のように二項目の記述だけで現状問題なくhttpsアクセスできている。
SSLCertificateFile /etc/letsencrypt/live/mysite.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/mysite.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/mysite.com/chain.pem
サイトが複数あり独自ドメイン、サブドメインまとめてワイルドカードで取得し一つの証明書で管理したいと思う場合もあるが、事前にDNSの登録を行う必要があり、それらの手間を考えるとそれほど賢明な方法だとは思わない。
証明書の有効期限は三カ月で期限が切れる前に更新する必要が生じる。
cronで更新処理を定期実行させるのが常套手段となるが、DNS登録ありきのワイルドカードによる証明書取得だとそのあたりに融通が利かない。サーバーにもよるが、どうしても手動による更新作業がついてまわる。
結局のところサイトごとに証明書を取得してcronで更新処理を自動化させるのが賢明だと自分は思っている。
証明書の更新コマンド(毎月1日の1時に更新してその旨をメール受信する ※実際のところ更新期限の30日前にならなければ更新処理は行われない)
0 1 1 * * certbot renew 2>&1 | mail -s "Let's Encrypt update information" info@mysite.com && systemctl restart httpd
処理を毎日行うように記述してる例もあるようだが意味が分からない。
サイトごとの独自confファイルのVirtualHost *:80側で下記のようにhttpでアクセスしてきても強制的にhttpsにしてしまうのを推奨してる情報もあるが
RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
更新処理のことを考えると微妙なので自分は行っていない。