かつては安くても数万円したドメイン証明書がサーバーネームベースが認められてからは、廉価なサービスのリリースが進み、安いものでは数百円までになりましたが、なんといっても値段で比較するなら「無料」のLet’s Encryptが最強でしょう。こちらもサーバーネームベースですよね。もちろん用途によっては不十分な場合もありますので、目的にしっかりあっているかを確認してから導入する必要があることは言うまでもありません。
【90日ごとに更新が必要です】
無料なので致し方ないのですが、これが面倒です。ただし最近では更新コマンドまで提供されていて、crondに登録しておけば、自動更新してくれるはずだったのです。
【あと20日以内にドメインの証明書切れますよ・・の通知メールが届きました】
1 2 3 4 5 |
Hello, Your certificate (or certificates) for the names listed below will expire in 20 days (on 14 May 18 02:54 +0000). Please make sure to renew your certificate before then, or visitors to your website will encounter errors. |
おかしいなあ。ちゃんとcrondで動作してるはずなのに。
■レスポンスが無いとのことで更新手続きが止まっていた。
とりあえず手動で、crondに登録してあったコマンドを実行
1 |
/usr/bin/certbot-auto renew --post-hook "service httpd restart" |
結果エラー。
1 2 |
Type: unauthorized Detail: Invalid response |
404エラーが帰ってきてDNSなどをチェックするように警告が出ます。
ネットでイロイロ調べました結果、certbot-autoで実行する場合、従来のwebrootを実行sし、一時的な確認用ページを.well-known/acme-challenge/配下に作成し、そこに外部からhttpでアクセスさせるようなのですが、この設定ファイルのドキュメントルート設定が違っている可能性が高いとのこと。
設定ファイルの場所
1 |
/etc/letsencrypt/renewal/[ドメイン名].conf |
見てみると案の定、apacheのデフォルトになってます。私はVirtual Hostを使ってるのでこれではアクセスできない。
早速正しいDocument Rootに変更です。
続いて、「/.well-known/acme-challenge」に外部からアクセスできるようにapacheとディレクトリの設定を行っておきます。
これらを終えた後に、改めてcrondに登録されいたコマンドを手動で実行すると無事、証明書は自動更新されました。
今回はひとまずこれでOKですが、次回はcrondで自動更新させたいですね。
1 2 |
Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/[ドメイン名]/fullchain.pem (success) |
成功です。