2021.02.10  

【Let's Encrypt 】SSL証明書の更新時にエラーが発生

SSL/TLS    

centos7 + nginxでLet's EncryptでSSL証明書を更新しようとした際、エラーが発生したのでその対処方法について記載する。
以下では証明書を更新するコマンドの certbot renew --force-renewalを実行している。

# certbot renew --force-renewal
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/hoge.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/certbot/_internal/renewal.py", line 71, in _reconstitute
    renewal_candidate = storage.RenewableCert(full_path, config)
  File "/usr/lib/python2.7/site-packages/certbot/_internal/storage.py", line 470, in __init__
    self._check_symlinks()
  File "/usr/lib/python2.7/site-packages/certbot/_internal/storage.py", line 537, in _check_symlinks
    "expected {0} to be a symlink".format(link))
CertStorageError: expected /etc/letsencrypt/live/hoge.com/cert.pem to be a symlink
Renewal configuration file /etc/letsencrypt/renewal/hoge.com.conf is broken. Skipping.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
No renewals were attempted.

Additionally, the following renewal configurations were invalid: 
  /etc/letsencrypt/renewal/hoge.com.conf (parsefail)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0 renew failure(s), 1 parse failure(s)

CertStorageError: expected /etc/letsencrypt/live/hoge.com/cert.pem to be a symlink というエラーがでている。
エラー内容をみると、どうやらシンボリックリンクのcert.pemが置かれていないという話らしい。
確認してみると、

# ls -l /etc/letsencrypt/live/hoge.com/
-rw-r--r--. 1 root root 1586  2月  9 08:52 chain.pem
-rw-r--r--. 1 root root 3424  2月  9 08:52 fullchain.pem
-rw-------. 1 root root 1704  2月  9 08:52 privkey.pem
-rw-r--r--. 1 root root 1838  2月  9 08:52 cert.pem

確かに、シンボリックリンクはない。あるのは通常ファイルだ。
本来/etc/letsencrypt/live/hoge.comに配置されるのは、
/etc/letsencrypt/archive/hoge.comに配置されているpemファイルへのシンボリックシンクになるそうだ。普通にインストールしただけなのにな。ツールのバグか??

それはさておき、liveの方ほファイルは適当なところに退避して、シンボリックリンクを作成してあげましょう。

# cd /etc/letsencrypt/live/hoge.com
# mkdir bk
# mv *.pem bk
# ln -s /etc/letsencrypt/archive/hoge.com/*.pem .

コマンドを順番に実行すると、/etc/letsencrypt/live/hoge.comにシンボリックリンクが作成される。

# ls -l /etc/letsencrypt/live/hoge.com
合計 0
drwxr-xr-x. 2 root root 79  2月 10 03:31 bk
lrwxrwxrwx. 1 root root 48  2月 10 03:59 cert1.pem -> /etc/letsencrypt/archive/hoge.com/cert1.pem
lrwxrwxrwx. 1 root root 49  2月 10 03:59 chain1.pem -> /etc/letsencrypt/archive/hoge.com/chain1.pem
lrwxrwxrwx. 1 root root 53  2月 10 03:59 fullchain1.pem -> /etc/letsencrypt/archive/hoge.com/fullchain1.pem
lrwxrwxrwx. 1 root root 51  2月 10 03:59 privkey1.pem -> /etc/letsencrypt/archive/hoge.com/privkey1.pem

シンボリックリンクの名前にxxx1.pemなどの番号がついてしまっているので、
それをリネームしてxxx.pemのかたちに修正。

# mv cert1.pem cert.pem
# mv chain1.pem chain.pem
# mv fullchain1pem fullchain.pem
# mv privkey1.pem privkey.pem

もう一度 ls -l を実行。

# ls -l /etc/letsencrypt/live/hoge.com
合計 0
drwxr-xr-x. 2 root root 79  2月 10 03:31 bk
lrwxrwxrwx. 1 root root 48  2月 10 03:59 cert.pem -> /etc/letsencrypt/archive/hoge.com/cert1.pem
lrwxrwxrwx. 1 root root 49  2月 10 03:59 chain.pem -> /etc/letsencrypt/archive/hoge.com/chain1.pem
lrwxrwxrwx. 1 root root 53  2月 10 03:59 fullchain.pem -> /etc/letsencrypt/archive/hoge.com/fullchain1.pem
lrwxrwxrwx. 1 root root 51  2月 10 03:59 privkey.pem -> /etc/letsencrypt/archive/hoge.com/privkey1.pem

これでSSLの更新処理ができるはず。

# certbot renew --force-renewal
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/hoge.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Plugins selected: Authenticator standalone, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Renewing an existing certificate for hoge.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/hoge.com/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all renewals succeeded: 
  /etc/letsencrypt/live/hoge.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

これで成功。
あとは、webサーバーを再起動すれば証明書が適用される。
お疲れさまでした!

コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信