このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
サーバ:ssl証明書:自動更新に失敗_let_s_encrypt [2020/11/05 11:11] humolife |
サーバ:ssl証明書:自動更新に失敗_let_s_encrypt [2020/11/05 12:03] (現在) humolife [自動更新失敗の原因] |
||
---|---|---|---|
行 1: | 行 1: | ||
====== SSL証明書の自動更新に失敗(Let' | ====== SSL証明書の自動更新に失敗(Let' | ||
- | AWSのEC2同一サーバ内にて稼働させていたバーチャルドメイン3サイトの内、1サイトだけSSL証明書の更新に失敗していました。\\ | + | 自動更新に失敗した場合、以下のようなタイトルのメールが届きます。 |
- | そこで、以下のコマンドでステータスを確認。\\ | + | > Let's Encrypt certificate expiration notice for domain " |
+ | 実際にサイトにアクセスして証明書の有効期限を確認すると、30日を切っていることが確認できるかと思います。 | ||
+ | そこで、サーバにアクセスし、certbot-renew | ||
(オプション -l を付けることで、詳細なログが表示されます) | (オプション -l を付けることで、詳細なログが表示されます) | ||
< | < | ||
- | $ sudo systemctl status -l certbot-renew | + | sudo systemctl status -l certbot-renew |
● certbot-renew.service - This service automatically renews any certbot certificates found | ● certbot-renew.service - This service automatically renews any certbot certificates found | ||
行 22: | 行 24: | ||
n月 dd 03:28:13 XXX.XXX.XXX.XXX systemd[1]: certbot-renew.service failed. | n月 dd 03:28:13 XXX.XXX.XXX.XXX systemd[1]: certbot-renew.service failed. | ||
- | # より詳細なログを見たい場合は、以下のファイルを確認 | + | # より詳細なログを見たい場合は、以下のファイルを確認します |
sudo less / | sudo less / | ||
</ | </ | ||
- | 確かに example.com で更新に失敗しています。\\ | ||
- | しかし、このログだけでは何が原因で失敗したのかわかりません。\\ | ||
- | そこで、試しにSSL証明書の更新コマンドを実行してみます。 | ||
- | < | ||
- | $ sudo certbot renew | ||
- | Saving debug log to / | + | ===== 自動更新失敗の原因 ===== |
- | + | - [[サーバ:ssl証明書: | |
- | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | + | - [[サーバ: |
- | Processing / | + | |
- | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | + | |
- | Cert is due for renewal, auto-renewing... | + | |
- | Plugins selected: Authenticator webroot, Installer None | + | |
- | Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org | + | |
- | Renewing an existing certificate | + | |
- | Performing the following challenges: | + | |
- | http-01 challenge for example.com | + | |
- | Cleaning up challenges | + | |
- | Encountered exception during recovery: | + | |
- | Traceback (most recent call last): | + | |
- | | + | |
- | self.funcs[-1]() | + | |
- | File "/ | + | |
- | self.auth.cleanup(achalls) | + | |
- | File "/ | + | |
- | os.remove(validation_path) | + | |
- | OSError: | + | |
- | Attempting to renew cert (example.com) from / | + | |
- | [Errno 2] No such file or directory: '/ | + | |
- | </ | + | |
- | すると、23行目で「ディレクトリが無いよ」というエラーが出ています。\\ | + | |
- | しかし、そもそも「/ | + | |
- | ということは、証明書発行時のコマンドで、このサイトだけなにかミスっていたようです。 | + | |
- | + | ||
- | 3行目に「/ | + | |
- | + | ||
- | Let's Encrypt について調べていたところ「/ | + | |
- | < | + | |
- | $ sudo ls -l / | + | |
- | + | ||
- | example.com.conf | + | |
- | example.net.conf | + | |
- | example.org.conf | + | |
- | </ | + | |
- | こんな感じでサイト毎の設定ファイルがありました。\\ | + | |
- | 次に、各設定ファイルの中身を確認します。\\ | + | |
- | < | + | |
- | # 更新に失敗していたドメイン | + | |
- | $ sudo less / | + | |
- | + | ||
- | # renew_before_expiry = 30 days | + | |
- | version = 0.27.1 | + | |
- | archive_dir = / | + | |
- | cert = / | + | |
- | privkey = / | + | |
- | chain = / | + | |
- | fullchain = / | + | |
- | + | ||
- | # Options used in the renewal process | + | |
- | [renewalparams] | + | |
- | authenticator = webroot | + | |
- | account = XXXXXXXXXXX | + | |
- | webroot_path = / | + | |
- | server = https:// | + | |
- | [[webroot_map]] | + | |
- | example.com = / | + | |
- | </ | + | |
- | < | + | |
- | # 更新に成功していたドメイン | + | |
- | $ sudo less / | + | |
- | + | ||
- | # renew_before_expiry = 30 days | + | |
- | version = 0.27.1 | + | |
- | archive_dir = / | + | |
- | cert = / | + | |
- | privkey = / | + | |
- | chain = / | + | |
- | fullchain = / | + | |
- | + | ||
- | # Options used in the renewal process | + | |
- | [renewalparams] | + | |
- | authenticator = apache | + | |
- | installer = apache | + | |
- | account = XXXXXXXXXXX | + | |
- | server = https:// | + | |
- | post_hook = apachectl graceful | + | |
- | </ | + | |
- | 上記を比較すると、失敗していたドメインと、成功していたドメインで設定に違いが出ています。\\ | + | |
- | やはり、証明書発行時に何かミスをしていたようです。\\ | + | |
- | そこで、成功していた設定ファイルを元に書き換えます。 | + | |
- | < | + | |
- | $ sudoedit / | + | |
- | + | ||
- | # authenticator を webroot から apache に変更 | + | |
- | authenticator = apache | + | |
- | + | ||
- | # installer を追加 | + | |
- | installer = apache | + | |
- | + | ||
- | # 以下の webroot_path に関する行を削除 | + | |
- | webroot_path = / | + | |
- | + | ||
- | # 以下の2行も削除 | + | |
- | [[webroot_map]] | + | |
- | example.com = / | + | |
- | + | ||
- | # 更新後に再起動するように以下を追加 | + | |
- | post_hook = apachectl graceful | + | |
- | </ | + | |
- | この状態で再度、証明証の更新を試します。 | + | |
- | < | + | |
- | $ sudo certbot renew | + | |
- | </ | + | |
- | 今度は更新に成功しました。\\ | + | |
- | 念の為、証明書の有効期限を確認します。 | + | |
- | < | + | |
- | # 現在使用中の証明書ファイル名を確認 | + | |
- | $ sudo ls -l / | + | |
- | + | ||
- | README | + | |
- | cert.pem -> ../ | + | |
- | chain.pem -> ../ | + | |
- | fullchain.pem -> ../ | + | |
- | privkey.pem -> ../ | + | |
- | + | ||
- | # 上記 | + | |
- | $ sudo openssl x509 -noout -dates -in / | + | |
- | + | ||
- | notBefore=Jan | + | |
- | notAfter=Apr | + | |
- | </ | + | |
- | 無事、有効期限が更新されていることを確認できました。 | + |