はじめに
無料のSSL証明書「Let’s Encrypt」導入方法の備忘録です。
Let’s Encryptの証明書有効期限は3ヶ月間となっています。
この記事ではLet’s Encryptの導入方法と、証明書の更新方法を簡潔にご紹介します。
※CentOS7 + Apache2.4で実施しました。
導入方法
HTTPS (443) ポートを開放
# firewall-cmd --add-service=https --zone=public --permanent
# firewall-cmd --reload
certbotをインストール
certbotはLet’s Encryptのクライアントソフトです。
certbotをインストールすることにより、簡単なコマンド操作で証明書の取得・更新ができるようになります。
# yum install epel-release
# yum -y install certbot
証明書の初回作成
以下のコマンドを実行すると/etc/letsencrypt/live/[ドメイン名]/に証明書が生成されます。
# certbot certonly --agree-tos --non-interactive -d [ドメイン名] --webroot -w [ドキュメントルートのパス] --email [管理者のメールアドレス]
–webroot -w [ドキュメントルートのパス]はウェブサーバで公開するコンテンツが入っているディレクトリを指しています。
例
–webroot -w /var/www/example -d example.com
mod_sslのインストール
mod_sslをインストールします。
mod_sslはApacheでSSL/TLSを利用するための定番のモジュールです。
# yum -y install mod_ssl
コマンドを実行するとapacheのモジュールフォルダ内にssl.confファイルが生成されます。
mod_ssl設定
mod_sslに対して、最小限の設定しなければいけない項目だけ記述しておきます。
VirtualHost 443タグ内にある(なければ追加)
ServerName
ServerAdmin
DocumentRoot
SSLCertificateKeyFile
SSLCertificateFile
SSLCertificateChainFile
に対して値を指定していきましょう
vi /etc/httpd/conf.d/ssl.conf
<VirtualHost *:443>
## 以下設定箇所だけ抜粋
ServerName ドメイン名
ServerAdmin 管理者のメールアドレス
DocumentRoot ドキュメントルートパス
SSLEngine on
SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン名/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/ドメイン名/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/ドメイン名/chain.pem
</VirtualHost>
HTTP→HTTPS転送設定(任意)
mod_rewriteモジュールを使ってすべてのアクセスをHTTPSに転送することができます。
※こちらは任意項目です。不要であれば飛ばしてください。
設定ファイルをモジュールフォルダ内に作成します。
vi /etc/httpd/conf.d/rewrite.conf
<IfModule rewrite_module>
RewriteEngine On
LogLevel alert rewrite:trace3
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>
Apacheの再起動
設定を反映させるためにApacheを再起動させます。
# systemctl restart httpd
確認
ここまできたらHTTPS化できてるはずです。
自身のサイトにブラウザでHTTPSでアクセスしてみましょう。
画像のようになっていれば成功です。
更新方法
文頭でも記述した通りLet’s Encryptの証明書有効期限は3ヶ月間となっています。
期限が近づくと設定したメールアドレスに対して有効期限のアラートが届きます。
期限まで30日未満になったら、更新作業が可能となるので、忘れないように更新作業をしましょう。
コマンドで更新
以下コマンドを実行することで期限を延長することができます。
# certbot renew
とても簡単ですね!
ただし、ヒューマン作業だと面倒ですし、忘れてしまうこともあるかもしれません。
そんなときはcrontabで自動化するとよいでしょう。
crontabで自動更新
自動化といってもcrontabでコマンドを定期的に実行してもらうだけです。
※ 証明書の更新には root 権限が必要ですので、root ユーザーの cron に設定するようにしてください。
# crontab -u root -e
00 05 01 * * certbot renew
ここでは例として、毎月1日の深夜5:00に証明書を更新するようにしました。
crontabの日時の指定は左から 分 時 日 時 曜日(0~7 [0,7は日曜日] or sun~sat)となっています。
以上、無料SSL証明書「Let’s Encrypt」の導入 ~ 更新の方法でした!
参考
Let’s Encrypt 総合ポータル
CentOS 7 + Apache 2.4 に Let’s Encrypt の証明書を導入する手順
Let’s Encrypt の証明書の更新を自動化する手順 (cron)