概要
Let's EncryptでSSL証明書の発行をする際に、手順書などがなく、その都度調べる必要がありました。そのため、手順の明確化を図り、作業の効率を上げるために作成します。
目次
1.SSL証明書とは
SSL証明書は「認証局」と呼ばれる第三者機関によって発行される電子証明書です。
「このドメインはちゃんと実在しており、管理者も定められているよ」ということを、第三者機関が確認・証明してくれるものであり、通常は、証明機関から年単位で有償で購入する形になるのですが、Let's Encryptというサービスを使うとSSL証明書を無料で取得することが出来ます。
ただし、有効期間は発行日から3か月となりますので、注意が必要です。
2.事前準備
①ドメインの確認
更新したいドメイン名を確認しておくこと。
作成されていない場合は、作成できる人に頼むか、自身で作成を行ってください。
②ファイアウォール設定の確認
通常のhttpでは、通信は「80番」という通信ポートを使用するのに対し、httpsの通信は「443番」という通信ポートを使用します。
ファイアウォールの設定によっては、443ポートが閉じられていることがありますので、その場合は解放するようにしましょう。
現在の設定の確認
firewall-cmd --list-all
設定されていなかった場合のポート開放方法
firewall-cmd --zone=public --add-port=ポート番号/tcp --permanent
firewall-cmd --reload
③サーバーのポート設定の確認
サーバー自体にもファイアウォールと同じようにポートの設定項目があるので、httpとhttpsを許可しておきましょう。
3.手順
①certbotのインストール
yum install epel-release
yum install certbot python-certbot-apache
②certbotのテスト実行
certbot certonly --agree-tos --webroot -w ドキュメントルート -d ドメイン名 --dry-run
オプションの意味
--agree-tos 利用規約に同意
-w ドキュメントルートを指定
-d ドメインを指定
--dry-run テスト実行
※テスト実行は必ず行いましょう。
テストを行わず、作成に何度か失敗すると、1週間証明書の作成ができなくなります。
上記コマンドを入力すると次に、メールアドレスを入力するように求められます。
証明書の有効期限が近づいた際にお知らせしてくれたりすることなどに利用されます。
※2回目以降は1回目に入力したメールアドレスが自動的に入力されます。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): メールアドレスを入力
成功した場合下記のようなメッセージが表示されます。
IMPORTANT NOTES:
- The dry run was successful.
③certbotの本番実行
certbot certonly --webroot -w ドキュメントルート -d ドメイン名
証明書の取得に成功した場合、/etc/letsencrypt/live/ドメイン名/
ディレクトリに証明書ファイルが保存されます。
④Apacheへの設定
/etc/httpd/conf.d/
配下に任意の名前で設定ファイルを作成し、下記のように設定を追記します。
<VirtualHost *:443>
ServerName ドメイン名:443
DocumentRoot /var/www/html/プロジェクト名/public
<Directory /var/www/html/プロジェクト名4/public>
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
ErrorLog /var/log/httpd/error-プロジェクト名.log
SSLEngine on
#SSLProtocol all -SSLv2
SSLCertificateFile /etc/letsencrypt/live/ドメイン名/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン名/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/ドメイン名/chain.pem
</VirtualHost>
⑤Apacheの再起動
systemctl restart httpd
⑥サイトの確認
https://[ドメイン名]/ にアクセスし、URLの欄に鍵マークがついていれば
⑦証明書期限の確認方法
「鍵マーク」→「この接続は保護されています」→「証明書は有効です」の順に進んでいく。証明書ビューアが表示されます。そこで、有効期限の確認が出来ます。
4.SSL証明書の更新方法
無料で SSL/TLS 証明書を発行できる Let’s Encrypt の証明書有効期限は3ヶ月間です。
有効期限が近づくと Let’s Encrypt からその旨をお知らせするメールが届くわけですが、毎回手作業で certbot renew コマンドを実行するのは面倒です。
ここでは、Let’s Encrypt の証明書の更新を cron で自動化する手順について解説します。
①crontabを開く
crontab -u root -e
②編集画面が開いたら下記内容を追記し、保存する
0 0 1 * * certbot renew && systemctl restart httpd
cron にこのように設定すると、定期的に自動で証明書を更新してくれます。
ここでは例として、毎月1日の深夜0:00に証明書を更新するようにします。
③設定の適用を行う
systemctl restart crond
以上で設定は終了となります。
-
おまけ)cronについて
cronの基本
cronは「* * * * *」の5箇所を指定して、起動時間を設定します。
左から「分」「時」「日」「月」「曜日」を指定します。
# cronの起動時間設定 * * * * * (起動したい処理) | | | | | | | | | |- 曜日 | | | |--- 月 | | |----- 日 | |------- 時 |--------- 分
上記5箇所に値を設定することで、様々なタイミングで処理を起動できます。