【CentOS7】Let's Encrypt のSSL証明書を導入する

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【CentOS7】Let's Encrypt のSSL証明書を導入する

2021-11-24 |

CentOS 7 のサーバーに Certbot を使って、Let's Encrypt の SSL 証明書を導入し、自動更新する手順のメモです。

環境

  • CentOS Linux release 7.9.2009 (Core)
  • Apache/2.4.6 (CentOS)
  • certbot 1.9.0

手順書

例として、ドキュメントルート /var/www/example にドメイン www.example.com として https でアクセスさせたい場合の手順を載せる。

必要なソフトウェアをインストールする

yum install epel-release
yum install certbot python-certbot-apache

Apache やドメインの設定をする

SSL 証明書を発行する前にブラウザなどからドメインにアクセスできるように設定しておく必要がある。

ドメインの DNS レコードの設定が必要な場合は、反映に時間がかかる場合があるので先にやっておく。

今回は、Apache を使うので、その場合の設定例を下記に示す。

<VirtualHost *:80>
    ServerName www.example.com
    DocumentRoot /var/www/example
</VirtualHost>

ポートを開放する

http(80) と https(443)のポートを開放しておく。
手順は、下記の記事を参考にして下さい。

【CentOS7】ポートを開放する

certbot を実行して SSL 証明証を発行する

下記のコマンドを実行する。

certbot certonly --webroot -w /var/www/example/ -d www.example.com

初回の場合、メールアドレスと Terms への同意を求められるのでそれぞれ入力する。

証明証の発行に失敗する場合は、Chrome などのブラウザで設定したドメインでページが正常に表示されるか確認する。

証明証の発行に成功するうと下記のディレクトリーに証明証が保管される。(厳密に言うとリンクが保管されていてファイル自体は別のディレクトリーにある)

/etc/letsencrypt/live/www.example.com/*

https でアクセスできるよう apache を設定する

https の設定と http のアクセスを 強制的に https へ転送する設定を下記に示す。

<VirtualHost *:80>
    ServerName www.example.com
    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    </IfModule>
</VirtualHost>
<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/www.example.com/chain.pem
    ServerName www.example.com
    DocumentRoot /var/www/example
</VirtualHost>

設定ファイルを保管後、下記のコマンドを実行して apache を再起動する。

systemctl restart httpd

apache を再起動後、ブラウザで https://www.example.com にアクセスして https でちゃんとページが表示されるか確認する。

cron で証明証が自動更新されるように設定する

Let's Encrypt の SSL 証明書は、3 ヶ月で有効期限が切れるので、cron を使い、自動更新されるように設定する。

下記のコマンドを実行して cron の設定ファイルを開く。

crontab -e

vi でファイルが開かれる。
i を押して編集モードに入ると、カーソルキーでカーソルを移動、 Enter で改行できるようになるので改行して新しい行に設定を入力する。
下記は、毎月の 1 日の 6:30 に有効期限が 30 日未満の証明証が更新されるように設定する例です。

30 6 1 * * root certbot renew --quieti

入力が終わったら Esc:wqEnter の順に押して、設定ファイルを保存、vi を終了する。

下記のコマンドを実行し、cron のサービスを再起動しておく。

systemctl restart crond.service

cron に先程入力した設定が反映されてるか下記のコマンドを実行し確認する。

crontab -l

先程入力した内容が出力されれば、cron に反映されている。

尚、オプションで有効期限が 30 日以上ある証明証を強制的に更新する事もできますが、そこまでする必要はないです。