このページの2つのバージョン間の差分を表示します。
次のリビジョン | 前のリビジョン | ||
サーバ:ssl証明書_let_s_encrypt:自動更新に失敗 [2019/02/07 17:46] 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 -in / | ||
- | |||
- | notBefore=Jan | ||
- | notAfter=Apr | ||
- | </ | ||
- | 無事、有効期限が更新されていることを確認できました。 |