Let's Encrypt SSL/TLS certificates may require manual update

As highlighted in the forums by Sean, Let's Encrypt recently discovered a bug in their Certificate Authority (aka CAA). The implication of this is that some of the certificates that they have issued, they shouldn't have! So to resolve this, they will be revoking the affected certificates, starting Wednesday, March 4th 2020, 00:00 UTC.

It's highly unlikely that you have been granted a certificate that you shouldn't, so renewing your certificate should resolve the issue. Apparently it only affects certificates issued within the last month, so if you know for sure that your cert hasn't been recently updated, then you should be good. If you want to be on the safe side and manually force a certificate update regardless, then that's a fine option and please do so. If you want to double check for sure before you do anything, then I cover that directly below.

Am I affected?

If you are using Let's Encrypt SSL/TLS certificates for your website (or mailserver or other web service) then you may be affected. If you wish to be sure, then there are a few different ways that you can check. Please note though, that forcing a certificate renewal is pretty easy and won't do any harm (if it fails, then there was likely already an issue). So if you'd rather just be on the safe side, please feel free to just force a renewal.

Check via online tool

The first is to input your website URL into the online tester. That will be pretty handy to check a single domain/certificate, or even a couple should be pretty easy. If you have lots to check, then there are probably better/easier ways...

FWIW, the online tool can also be used to check via the command line (change 'example.com' to your domain):

curl -XPOST -d 'fqdn=example.com' https://checkhost.unboundtest.com/checkhost

Check against the list

Another way to check is to download the list of affected certificates (as noted on this LE doc page) and search it for your domain. So first download the list (it's ~315MB so might take a minute or 2):

wget https://d4twhgtvn0ff5.cloudfront.net/caa-rechecking-incident-affected-serials.txt.gz

Then use zgrep (like grep, but for gzipped files; alternatively un-gzip the file first) to check like this (change 'example.com' to your domain):

zgrep example.com caa-rechecking-incident-affected-serials.txt.gz

It is also possible to get the serial number of your certificate and use that to check against this list. Personally, I think one of the other methods are preferable. But if you are keen for that, the layout of the caa-rechecking-incident-affected-serials.txt.gz file is noted on the relevant LE page and you can get the serial of your certificate like this (again, change 'example.com' to your domain):

openssl s_client -connect ${DOMAIN}:443 -servername ${DOMAIN} -showcerts /null 2>/dev/null \
    | openssl x509 -text -noout | grep -A 1 Serial\ Number | tr -d :

Tool to use if you have lots of certs to check

If you have lots of certs to check, then Let's Encrypt recommend this tool from GitHub. I have no experience with it and can't really comment further, but sounds like it could be worth a try if you have a lot of certs you wish to check.

Force certificate renewal

Please note that I'm only covering TurnKey Linux's Confconsole Let's Encrypt integration here. If you used some other method to get your Let's Encrypt certificate, then please check their documentation on how to force an certificate renewal.

I'll cover double checking that you have the appropriate version, and how to update if you don't (your certs are possibly already broken if that's the case). But if you feel confident that everything is good with Confconsole and Dehydrated (the tool that Confconsole leverages to get the LE certificates) then please jump straight to the specific command.

Check you have the right versions

First up, double check that you have Confconsole v1.1.2 & Dehydrated v0.6+. Apt is the best tool to use for this check, so first update your package lists (if you aren't running as root, all these commands should be prefaced with 'sudo'):

apt update

Then check version like this:

apt policy confconsole dehydrated

Here's what I get on a v15.x server I have running (and you should get the same):

  Installed: 1.1.2
  Candidate: 1.1.2
  Version table:
 *** 1.1.2 100
        100 /var/lib/dpkg/status
     1.1.0+2+g6c2aad9 999
        999 http://archive.turnkeylinux.org/debian stretch/main amd64 Packages
  Installed: 0.6.2-2+deb10u1~deb9u1
  Candidate: 0.6.2-2+deb10u1~deb9u1
  Version table:
 *** 0.6.2-2+deb10u1~deb9u1 500
        500 http://deb.debian.org/debian stretch/main amd64 Packages
        100 /var/lib/dpkg/status

If you look at the relevant lines that start "Installed:", you can see that I have Confconsole v1.1.2 installed and Dehydrated v0.6.2-2+deb10u1~deb9u1. That's what you should have too (although if you have newer, then that's fine too).

If you do not have at least Dehydrated v0.6, then please update like this:

apt install dehydrated

FWIW previously 'stretch-backports' was required to install an up to date version of Dehydrated, however, the right version has been migrated to 'stretch main'. If you don't have at least Confconsole v1.1.2 installed, please follow the instructions on the Confconsole v1.1.2 release notes. (If you've just updated Dehydrated, you can skip step #2).

Force TurnKey Dehydrated Wrapper to renew certificate

Assuming that Confconsole and Dehydrated are up to date, then you can force TurnKey Dehydrated Wrapper to renew certificates (regardless of certificate expiry date) like this:

/usr/lib/confconsole/plugins.d/Lets_Encrypt/dehydrated-wrapper --force

Any problems or feedback?

If you hit any issues or have any feedback for us, please feel free to post a comment below, or open a new thread on the forums (free website user account required).

Add new comment