このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
|
サーバ:ssl証明書_let_s_encrypt:自動更新に失敗 [2019/02/07 17:51] yusuke_komori |
— (現在) | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | ====== SSL証明書の自動更新に失敗(Let' | ||
| - | AWSのEC2同一サーバ内にて稼働させていたバーチャルドメイン3サイトの内、1サイトだけSSL証明書の更新に失敗していました。\\ | ||
| - | そこで、以下のコマンドにてログを確認。\\ | ||
| - | (オプション -l を付けることで、詳細なログが表示されます) | ||
| - | < | ||
| - | $ sudo systemctl status certbot-renew -l | ||
| - | ● certbot-renew.service - This service automatically renews any certbot certificates found | ||
| - | | ||
| - | | ||
| - | Process: 24164 ExecStart=/ | ||
| - | Main PID: 24164 (code=exited, | ||
| - | |||
| - | n月 dd 03:28:13 XXX.XXX.XXX.XXX certbot[24164]: | ||
| - | n月 dd 03:28:13 XXX.XXX.XXX.XXX certbot[24164]: | ||
| - | n月 dd 03:28:13 XXX.XXX.XXX.XXX certbot[24164]: | ||
| - | n月 dd 03:28:13 XXX.XXX.XXX.XXX certbot[24164]: | ||
| - | n月 dd 03:28:13 XXX.XXX.XXX.XXX certbot[24164]: | ||
| - | n月 dd 03:28:13 XXX.XXX.XXX.XXX systemd[1]: certbot-renew.service: | ||
| - | n月 dd 03:28:13 XXX.XXX.XXX.XXX systemd[1]: Failed to start This service automatically renews any certbot certificates found. | ||
| - | n月 dd 03:28:13 XXX.XXX.XXX.XXX systemd[1]: Unit certbot-renew.service entered failed state. | ||
| - | n月 dd 03:28:13 XXX.XXX.XXX.XXX systemd[1]: certbot-renew.service failed. | ||
| - | </ | ||
| - | 確かに example.com で更新に失敗しています。\\ | ||
| - | しかし、このログだけでは何が原因で失敗したのかわかりません。\\ | ||
| - | そこで、試しにSSL証明書の更新コマンドを実行してみます。 | ||
| - | < | ||
| - | $ sudo certbot renew | ||
| - | |||
| - | Saving debug log to / | ||
| - | |||
| - | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
| - | 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): | ||
| - | File "/ | ||
| - | self.funcs[-1]() | ||
| - | File "/ | ||
| - | self.auth.cleanup(achalls) | ||
| - | File "/ | ||
| - | os.remove(validation_path) | ||
| - | OSError: [Errno 2] No such file or directory: '/ | ||
| - | 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 -> ../ | ||
| - | |||
| - | # 上記 cert.pem のシンボリックリンク先の証明書の有効期限を確認 | ||
| - | $ sudo openssl x509 -noout -dates -in / | ||
| - | |||
| - | notBefore=Jan | ||
| - | notAfter=Apr | ||
| - | </ | ||
| - | 無事、有効期限が更新されていることを確認できました。 | ||