Let's Encryptの無料SSL証明書をつかっている際、特定のドメインがhttpsで警告がでるようになっていました。
確認すると証明書がFake LE Intermediate X1になっています。
調べてみるとこれはテスト用の証明書で実際の証明書とは異なるとのこと。
テスト用の証明書が期限内であるため
$ certbot-auto renew をしてみても証明書は更新されません。
まずは
/etc/letsencrypt/cli.ini
にてserverが設定されておらず、
/etc/letsencrypt/renewal/xxxxxx.com.conf では
server = https://acme-v02.api.letsencrypt.org/directory
が設定されていてどちらもstagingのサーバは指定されていない状態であることを確認しました。
次に
$ sudo zcat /var/log/letsencrypt/letsencrypt.log.3.gz
で証明書有効期限の90日前あたりのログを確認したところ、'--test-cert', の文字が。
どうやら手動実行する際に一度テストしていてその証明書がずっと残っていたようです。
以上より、現在の設定に問題はなさそうなのであとは更新が実行できれば問題なさそうというところになりました。
SSL証明書の強制更新を行いますが、まずはテスト実行します。
$ sudo /usr/local/certbot/certbot-auto certonly --dry-run --force-renewal --webroot -w /var/www/example/public -d xxxxxx.com --renew-by-default
/var/www/example/public と xxxxxx.com の部分は適宜書き換えてください。
/var/www/example/public はwebのrootです。
nginxならconfファイルでrootとして設定しているディレクトリですね。
こちらを実行して
IMPORTANT NOTES:
- The dry run was successful.
の表示がでればOKです。
Saving debug log to /var/log/xxxxxx
というような表示もでているかと思いますので
$ sudo cat /var/log/xxxxxx
などで処理される内容も確認しておきましょう。
問題がなければ先程のコマンドから--dry-runを抜いて本実行します。
$ sudo /usr/local/certbot/certbot-auto certonly --force-renewal --webroot -w /var/www/example/public -d xxxxxx.com --renew-by-default
成功すれば
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/xxxxxx.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/xxxxxx.com/privkey.pem Your cert will expire on 20xx-xx-xx. To obtain a new or tweaked version of this certificate in the future, simply run certbot-auto again. To non-interactively renew *all* of your certificates, run "certbot-auto renew"
というような、Congratulations!と保存したキーのパス、有効期限を含んだメッセージが表示されます。
成功しているのを確認したらapatchやNginxを再起動して反映します。
Nginxなら
$ sudo nginx -s reload
ですね。
サイトにアクセスしてSSLのエラーがでなくなっていることを確認して完了です。