Let's Encrypt's Root Certificate is expiring!

By SCOTT HELME  20 SEP 2021 
https://scotthelme.co.uk/lets-encrypt-old-root-expiration/

On 30th September 2021, the root certificate that Let's Encrypt are currently 
using, the IdentTrust DST Root CA X3 certificate, will expire.

You may or may not need to do anything about this Root CA expiring, but I'm 
betting a few things will probably break on that day so here's what you need to 
know!

There's a long backstory

This seems like a shameless plug, but if you really want to know more about how 
Certificate Authorities (CA) and Certificate Chains work, you should consider 
joining me on the Practical TLS and PKI training course that I deliver. For 
everyone else, this blog post, and the details I'm going to link to, should be 
enough to understand what's going to happen and why.

Ultimately, all certificates that power HTTPS on the Web are issued by a CA, a 
trusted organisation recognised by your device/OS. Here you can see the list of 
"Trusted Root Certificate Authorities" on my current Windows 10 device:

(Graphic)

These certificates are built into your OS and are generally updated as part of 
the normal process of updating your OS. The certificate in here that is going 
to cause a problem is this one, the IdenTrust DST Root CA X3.

(Graphic)

As you can see, the clock is ticking and we are getting close to the expiration 
date of 30th Sep 2021 but it's not just an expiration date, it's an expiration 
timestamp that we call notAfter:

(Graphic)

That's converted to BST for me, but if I parse the certificate using OpenSSL 
X509 you can see the UTC timestamp for expiration:

(Graphic)

That gives us quite a specific time for when this certificate will expire:

        Validity
            Not Before: Sep 30 21:12:19 2000 GMT
            Not After : Sep 30 14:01:15 2021 GMT

Once this root CA has expired, clients, like web browsers, will no longer trust 
certificates that have been issued by this CA.

The end is nigh!

This will not be the first time a root CA certificate has expired and I imagine 
it will follow the same trend as previous expirations where things break. If 
the root certificate that your certificate chain anchors on is expired then 
there's a good chance it's going to cause things to fail.

This happened last year, on May 30th at 10:48:38 2020 GMT to be exact, when the 
AddTrust External CA Root expired and took a bunch of things with it. 
Organisations like Roku, Stripe, Spreedly and many others had problems and they 
weren't the only ones, even RedHat had something to say about the event.

If you're interested in more details on the past AddTrust expiration, what 
might be in store for the IdenTrust expiration and what you can do about it, 
this 4-part series I wrote will help you, but be warned, it's not for the 
fainthearted!

In normal circumstances this event, a root CA expiring, wouldn't even be worth 
talking about because the transition from an old root certificate to a new root 
certificate is completely transparent. The reason we're having a problem at all 
is because clients don't get updated regularly and if the client doesn't get 
updated, then the new root CA that replaces the old, expiring root CA is not 
downloaded onto the device.

Let's Encrypt have grown

In the last year alone, Let's Encrypt have grown their market share quite a lot 
and as a CA becomes larger, it's certificates enable more of the Web to operate 
and as a result, when something like this comes along they have the potential 
to cause more problems. This is nothing to do with what Let's Encrypt have 
done, or have not done, this still comes down to the same underlying problem 
that devices out in the ecosystem aren't being updated as they should be.

Given the relative size difference between Let's Encrypt and AddTrust, I have a 
feeling that the IdenTrust root expiry has the potential to cause more 
problems. Nobody really knows how much of a problem it could be, it could be of 
similar consequence to the AddTrust expiry, or there could be some unforeseen 
circumstances and it could be far worse, your guess is as good as mine.

What are Let's Encrypt doing about it?

As I said above, this issue isn't happening because of anything that Let's 
Encrypt have or have not done, it's happening because all certificates 
eventually expire and if devices aren't being updated then they won't receive 
the new, replacement certificates. That said, Let's Encrypt have not sat around 
and twiddled their thumbs as the expiration date has approached, they've been 
working hard trying to figure out a solution.

Back in April 2019 I wrote Let's Encrypt to transition to ISRG root, where 
Let's Encrypt had planned to move away from the IdenTrust root to their own 
root, ISRG Root X1, that expires on 4th June 2035, giving us quite a number of 
years. The problem was, not many devices had received the necessary updates 
that include this new ISRG Root X1, issued 4 years prior in 2015! If a large 
selection of devices had not received an update to include this new root 
certificate, they simply won't trust it. This is basically the same problem 
we're experiencing now with the IdenTrust root expiring, because client devices 
haven't been updated, they also haven't received the new ISRG Root X1. The 
transition was postponed.

In September 2020 I had to write another article, Let's Encrypt postpone the 
ISRG Root transition, to explain, for the third time, that Let's Encrypt had 
again postponed the transition. They cited the following concerns:

Due to concerns about insufficient ISRG root propagation on Android devices we 
have decided to move the date on which we will start serving a chain to our own 
root to January 11, 2021.
This loosely translates to Android devices not having received an update for 
over 4 years, meaning those devices had still not received the ISRG Root X1, 
meaning they wouldn't trust it. Let's Encrypt can't move to issuing from the 
new root, but the IdenTrust root still has 1 year of life left and the clock is 
really ticking now.

In the end, something a little unexpected has happened which might just reduce 
the serious impact of this event and make it a little more palatable. Because 
old Android devices don't check the expiration date of a root certificate when 
they use it, Let's Encrypt may be able to continue to chain down to the expired 
root certificate without any problem on those older devices. This does 
introduce some complexity going forwards, but ultimately the goal is Extending 
Android Device Compatibility for Let's Encrypt Certificates.

For this to work, Let's Encrypt had to get a cross-sign for their own ISRG Root 
X1 certificate from the expiring IdenTrust DST Root CA X3, but that wouldn't 
help at all unless the cross-signed root was valid for longer than the signing 
root, which it is. The new ISRG Root X1 certificate is valid for longer than 
the IdenTrust DST Root CA X3 that signed it!

As we now know, the IdenTrust DST Root CA X3 expires on 30th September 2021, 
but the new, cross-signed, ISRG Root X1 does not expire until 30th September 
2024!

By extending the validity of the new cross-signed root beyond that of the 
signing root, Let's Encrypt have found a way to sneak past the rules and buy us 
another 3 years until this problem happens all over again. Some people are not 
happy with the sneaky play, but it does seem that it falls within the rules, 
though not perhaps what everyone would have expected or preferred. This new, 
cross-signed ISRG Root X1 is also not to be confused with the existing ISRG 
Root X1 that hasn't changed and further details can be found here.


Hopefully, this will help alleviate a lot of the problems that were pending, 
but it's not a solution to all problems as any client that enforces the 
expiration date of the root certificate that it anchors on, will still fail.

Affected Clients

One of the notable clients that will still be affected by this expiration is 
anything depending on the OpenSSL 1.0.2 or earlier library, release 22nd 
January 2015 and last update as OpenSSL 1.0.2u on 20th December 2019. OpenSSL 
have released a blog post detailing what action those affected can take, but 
they all require manual intervention to prevent breakage, full details are 
here. The brief overview of options is:

Remove the IdenTrust DST Root CA X3 root certificate and manually install the 
ISRG Root X1 root certificate (not the cross-signed one).

If you're using OpenSSL commands like verify or s_client you can add the 
--trusted_first flag if possible.

Have the server serve an alternate certificate chain that goes directly to the 
ISRG Root X1 (not the cross-signed one), but this will break the above 
mentioned Android devices.

This Let's Encrypt docs page contains a list of clients that only trust the 
IdenTrust DST Root CA X3 certificate and after that is the list of platforms 
that trust ISRG Root X1. I've blended these two lists together to produce the 
following list of clients that will break after the IdenTrust DST Root CA X3 
expires.

OpenSSL <= 1.0.2
Windows < XP SP3
macOS < 10.12.1
iOS < 10 (iPhone 5 is the lowest model that can get to iOS 10)
Android < 7.1.1 (but >= 2.3.6 will work if served ISRG Root X1 cross-sign)
Mozilla Firefox < 50
Ubuntu < 16.04
Debian < 8
Java 8 < 8u141
Java 7 < 7u151
NSS < 3.26
Amazon FireOS (Silk Browser)

Platforms that I'm still unsure of and will need some further investigation to 
see if they will fail after the IdenTrust DST Root CA X3 expires are:

Cyanogen > v10
Jolla Sailfish OS > v1.1.2.16
Kindle > v3.4.1
Blackberry >= 10.3.3
PS4 game console with firmware >= 5.00
IIS

The answer to the question "what will happen when the IdenTrust root expires?" 
depends on how widespread the types of clients listed above are. I don't know 
what's floating around out there on the Web, and I don't know what depends on 
those things either. One thing that I do know, though, is that at least 
something, somewhere is going to break.

Update 08:08 BST 21st Sep 2021

I've added IIS to the 'unsure' list as some reports [1][2] suggest manual 
intervention is required for a smooth transition.

_______________________________________________
Link mailing list
[email protected]
https://mailman.anu.edu.au/mailman/listinfo/link

Reply via email to