I'm sure this is probably answered some where - but I'm having trouble finding it.
What is the correct ca bundle that is suppose to be used with Let's Encrypt certificates?
No doubt this is related to the DST Root CA X3 certificate expiring.
But when I'm talking to my provider I'm getting conflicting information. One is saying the DST Root CA X3 certificate expired on September 29, 2021. Another is saying the DST Root CA X3 is good through September 30, 2024.
The ca bundle that I seem to be getting when I issue a Let's Encrypt certificate shows two certificates. A ISRG Root X1 certificate that expires on September 15, 2025. And a DST Root CA X3 certificate that expires on September 30, 2024.
Another person is saying that the ISRG Root X1 certificate that expires on September 30, 2024 isn't valid. But it's being sent by Let's Encrypt.
I'm not really sure where the ca bundle that I'm getting is coming from. I'm using an acme.sh client to issue certificates and it's returning both the ISRG Root X1 certificate that expires on September 15, 2025 and a DST Root CA X3 certificate that expires on September 30, 2024. Maybe that's coming from something else in the acme.sh client?
I'm just wondering if there is an always up-to-date link from Let's Encrypt that always shows what the correct ca bundle to use for certificates currently being issued.
What you talk about - the certificates provided by acme.sh - are CA certificates returned by the ACME server (Let's Encrypt) and are so-called intermediates. They're part of what we call the certificate chain. This chain should be served by the server to the clients in every TLS handshake. They're not intended for much else.
A 'ca bundle' can mean many things, but it commonly refers to a trust store. A trust store is shipped with (TLS) clients and contains certificates (or public keys) that anchor trust - trust anchors. Those are often so-called 'root certificates'. These trust stores are usually managed by some root program, such as Mozilla's CA Certificate Program.
Any modern trust store should include ISRG Root X1, which is a root certificate valid until 2035. All current Let's Encrypt certificates chain up to this root. There exists also a cross-sign certificate of ISRG Root X1, which is part of the current default chain. This is likely the cause for your confusion, because these certificates share the same key and subject.
About DST Root CA X3, that indeed expired on Sep 30 14:01:15 2021 GMT. It is no longer considered valid by many devices. Let's Encrypts current chain still contains a cross-sign up to this expired root, because that helps with Android compatibility. This should not matter for most devices, as ISRG Root X1 is still valid and should also be in trust stores.
What exactly are you trying to do? Are you configuring a server or a client?
There are two ISRG Root X1 certificates.
One is included to trusted roots and valid to 2035. This one is included in ca bundles. (https://crt.sh/?id=9314791)
The other one is signed by DST Root CA X3 and it is valid until 30 Sep 2024. It exists solely to maintain the compatibility with old Android devices. This one is provided by default Letsencrypt chain, should not be added to any bundle because technically it's intermediate. (https://crt.sh/?id=3958242236)
And DST Root CA X3 already expired 30 Sep 2021, for some old OpenSSL clients it should be explicitly excluded from ca bundle if it's still there. (https://crt.sh/?id=8395)
It depends upon what one means by a "CA bundle". For example, if you're a cPanel user, you can absolutely include both the R3 (signed by ISRG Root X1) and cross-signed ISRG Root X1 (signed by DST Root CA X3) intermediate certificates in the CA bundle box when installing a certificate via the cPanel SSL interface.
Actually I can't install it in cPanel if I include the DST Root CA X3 intermediate certificate.
I can if I exclude the DST Root CA X3 intermediate certificate.
When I inquired about this with my provider, they told me the DST Root CA X3 certificate is invalid. But when I check it, it shows as being valid until September 30, 2024.
Everything works without the DST Root CA X3 certificate for me, so I assume I'm up to date and using the ISRG Root X1 root certificate.
I guess ultimately the argument I'm having with my provider is that the DST Root CA X3 certificate (which I gather is an intermediate certificate) is included in the ca.cer file when my acme.sh client issues a certificate. I just assumed that that certificate should be included in the ca bundle when installing the certificate, even though it's probably not being used.
But I don't understand why it's invalid. I mean, cPanel's not installing it, so maybe it is invalid. But I don't really understand why it's invalid. And if it is invalid, why is it being included in the ca.cer file when issuing a certificate through acme.sh?
I'm sure I'm confusing something. I just don't really know what.
You should never include the self-signed DST Root CA X3 root certificate in your cPanel CA bundle because it's a root certificate. You should only include the two intermediate certificates that I mentioned (R3 signed by ISRG Root X1 and ISRG Root X1 signed by DST Root CA X3) if you want to use the long/default chain. You should only include the R3 signed by ISRG Root X1 intermediate certificate if you want to use the short/alternate chain.
Yea - the ISRG Root X1 signed by DST Root CA X3 - is the one I'm referring to. If I include that in the ca bundle field when installing a certificate, the certificate does not install.
For reference, CertSage (the ACME client that I authored), includes detailed cPanel certificate installation instructions that includes both intermediate certificates only the first intermediate.
"DST Root CA X3" is not, and I don't think has ever been used as, an intermediate certificate.
It is a ROOT certificate.
Thus, as such, should never be included in any bundle.
There are currently only two valid bundles (by bundle here I'm referring to the cert + chain). Short path:
[leaf signed by R3], [R3 signed by "ISRG Root X1"] Long path (default):
[leaf signed by R3], [R3 signed by "ISRG Root X1"], ["ISRG Root X1" signed by "DST Root CA X3"]
Your approach is probably the best here. Thanks for bringing my awareness to this absurdity. I will be cracking some skulls following up on this in the near future