ログだけでは何が原因で失敗したのかわからなかった場合は、試しにSSL証明書の更新コマンドを実行してみました。
- $ sudo certbot renew
- Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Processing /etc/letsencrypt/renewal/example.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 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 "/usr/lib/python2.7/site-packages/certbot/error_handler.py", line 108, in _call_registered
- self.funcs[-1]()
- File "/usr/lib/python2.7/site-packages/certbot/auth_handler.py", line 310, in _cleanup_challenges
- self.auth.cleanup(achalls)
- File "/usr/lib/python2.7/site-packages/certbot/plugins/webroot.py", line 222, in cleanup
- os.remove(validation_path)
- OSError: [Errno 2] No such file or directory: '/var/www/example.com/.well-known/acme-challenge/XXXXXXXXXX'
- Attempting to renew cert (example.com) from /etc/letsencrypt/renewal/example.com.conf produced an unexpected error:
- [Errno 2] No such file or directory: '/var/www/example.com'. Skipping.
すると、23行目で「ディレクトリが無いよ」というエラーが出ています。
しかし、そもそも「/var/www/example.com/」というディレクトリ構成にしていないので、無くて当然です。
ということは、証明書発行時のコマンドで、なにかミスっていたようです。
「/etc/letsencrypt/renewal」ディレクトリに、証明書更新のための設定ファイルがあるので、確認します。
- $ sudo ls -l /etc/letsencrypt/renewal
- example.com.conf
- example.net.conf
- example.org.conf
このようにサイト毎の設定ファイルがあります。
次に、各設定ファイルの中身を確認します。
- # 更新に失敗していたドメイン
- $ sudo less /etc/letsencrypt/renewal/example.com.conf
- # renew_before_expiry = 30 days
- version = 0.27.1
- archive_dir = /etc/letsencrypt/archive/example.com
- cert = /etc/letsencrypt/live/example.com/cert.pem
- privkey = /etc/letsencrypt/live/example.com/privkey.pem
- chain = /etc/letsencrypt/live/example.com/chain.pem
- fullchain = /etc/letsencrypt/live/example.com/fullchain.pem
- # Options used in the renewal process
- [renewalparams]
- authenticator = webroot
- account = XXXXXXXXXXX
- webroot_path = /var/www/example.com,
- server = https://acme-v02.api.letsencrypt.org/directory
- [[webroot_map]]
- example.com = /var/www/example.com
- # 更新に成功していたドメイン
- $ sudo less /etc/letsencrypt/renewal/example.net.conf
- # renew_before_expiry = 30 days
- version = 0.27.1
- archive_dir = /etc/letsencrypt/archive/example.net
- cert = /etc/letsencrypt/live/example.net/cert.pem
- privkey = /etc/letsencrypt/live/example.net/privkey.pem
- chain = /etc/letsencrypt/live/example.net/chain.pem
- fullchain = /etc/letsencrypt/live/example.net/fullchain.pem
- # Options used in the renewal process
- [renewalparams]
- authenticator = apache
- installer = apache
- account = XXXXXXXXXXX
- server = https://acme-v02.api.letsencrypt.org/directory
- post_hook = apachectl graceful
上記を比較すると、失敗していたドメインと、成功していたドメインで設定に違いが出ています。
証明書発行時に何かミスをしていたようです。
そこで、成功していた設定ファイルを元に書き換えます。
- $ sudoedit /etc/letsencrypt/renewal/example.com.conf
- # authenticator を webroot から apache に変更
- authenticator = apache
- # installer を追加
- installer = apache
- # 以下の webroot_path に関する行を削除
- webroot_path = /var/www/example.com,
- # 以下の2行も削除
- [[webroot_map]]
- example.com = /var/www/example.com
- # 更新後に再起動するように以下を追加
- post_hook = apachectl graceful
この状態で再度、証明証の更新を試します。
- $ sudo certbot renew
今度は更新に成功しました。
念の為、証明書の有効期限を確認します。
- # 現在使用中の証明書ファイル名を確認
- $ sudo ls -l /etc/letsencrypt/live/example.com/
- README
- cert.pem -> ../../archive/example.com/cert1.pem
- chain.pem -> ../../archive/example.com/chain1.pem
- fullchain.pem -> ../../archive/example.com/fullchain1.pem
- privkey.pem -> ../../archive/example.com/privkey1.pem
- # 上記 cert.pem のシンボリックリンク先の証明書の有効期限を確認
- $ sudo openssl x509 -noout -dates -in /etc/letsencrypt/archive/example.com/cert1.pem
- notBefore=Jan n HH:ii:ss YYYY GMT
- notAfter=Apr n HH:ii:ss YYYY GMT
無事、有効期限が更新されていることを確認できました。
コメント