When developing a java web app on Mac OS Catalina, you may have a service that makes an API request to a secure URL.
If you don’t have that secure (https) URL’s root certificate in your Java truststore, the call will fail with this error:
: : :
The solution is to put that secure URL’s host’s root certificate into your Java truststore. Easier said than done, but here’s how to do it on Mac OS Catalina.
- 1. Download the Certificate
- 2. Put the Certificate in your Java truststore
- Don’t Let Replacing the Expired DST Root CA x3 Bring You Down
- Manually Adding Certificates on Mac OS El Capitan
- Wrapping Up!
- Want More?
- Does Your Organization Need a Custom Solution?
- Comments
- Federal CA Certificates
- DoD ECA
- IdenTrust Global Common (IGC)
- IdenTrust SAFE-BioPharma
- IdenTrust Commercial
- IdenTrust Public Sector
- TrustID HID Enterprise CA 1
- IdenTrust DST Root CA X3
- Немного теории и истории
- Что произойдет 30 сентября?
- Что со всем этим делать?
- На стороне клиента
- Linux
- Windows
- На стороне сервера
- Итоги
1. Download the Certificate
- Go to the secure URL in the Chrome browser.
- Hit
F12
to open the Chrome Inspector Tools. - Open the “Security” tab in the Inspector Tools. It’s going to be on the right side of the top nav.
- Click the “View Certificate” button.
- Open a new Finder window somewhere else on your screen.
- In the certificate box, click on the certificate at the top of the tree. Then drag the big image of the Root Certificate into your Finder window. You should now have a file called something like: “DST Root CA X3.cer” in your finder window.
- Pro Tip:
- Clicking and dragging with no keys held down gives you a *.cer certificate
- Clicking and dragging with the Command key held down gives you a *.txt version of the certificate
- Clicking and dragging with the Option (or Alt) key held down gives you a *.pem version of the certificate
- The truststore will accept a *.pem or *.cer file
- Pro Tip:
- Rename the file so that it has no spaces in it: “DSTRootCAX3.cer”.
2. Put the Certificate in your Java truststore
- Open a Terminal window.
- Run this command to put the cert in your Java truststore:
sudo keytool - -alias dstrootcax3 -keystore /Library/Java/JavaVirtualMachines/jdk1_77.jdk/Contents/Home/jre/lib/security/cacerts -file DSTRootCAX3.cer
Here is the command broken down so you can see where to replace strings with your values:
sudo keytool -import -alias -keystore -file
You’ll next be asked for the password to the truststore. If you have never changed the password, the password is “changeit”.
The uniqueAliasName
should be a unique name within the truststore cert list that will let you recognize this particular cert, say, in case you want to remove it.
The pathToYourJavaInstallations_cacerts_file
is the path to cacerts file you are using as a truststore. If your server is not using a custom cacerts file, this will be at the default location for your Java installation. If you are using the default Java installation that came with your Mac, like I am, it could be this path: /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre/lib/security/cacerts
The pathToCertYouJustDownloaded
is the path to the cert you just put in your Finder folder.
If you’ve run the command successfully, you should see this message in your terminal: Certificate was added to keystore
You can now restart your Java web server, and your API call should work.
Срок действия корневого сертификата DST Root CA X3 истёк 30 сентября 2021 года. Соответственно, операционные системы и браузеры, которые давно не получали обновлений перестали доверять сайтам, сертификат безопасности которых был выдан центром сертификации Let’s Encrypt. Подробнее об этом я писал здесь: http://www.bolshoyvopros.ru/questions/3873202-oshibka-brauzera-google-chrome-chasy-speshat-kak-ispravit.html
Для начала, чтобы удостовериться что проблема связанна именно с отсутствием сертификата на вашем компьютере, проверим его наличие, или отсутствие. Для этого откройте Пуск => Панель управления => (Сеть и интернет) => Свойства браузера => Содержание => Сертификаты => Доверенные корневые центры сертификации. Пункт «Сеть и интернет» взят в скобки, потому что на разных ОС переход в «Свойства браузера» может быть сразу из «Панели управления».
Если выделенная на скриншоте строка у вас отсутствует, то вам необходимо установить сертификат ISRG Root X1.
Для этого переходим на официальный сайт Let’s Encrypt и скачиваем корневой сертификат ISRG Root X1 в формате der. К сожалению, разбираться нужно с английской версией, так как русская версия этой страницы устарела.
Ни в коем случае не скачивайте сертификаты с неизвестных и подозрительных сайтов!
Кликните по скачанному файлу сертификата, который будет иметь вот такой вид:
и разрешите его открытие, нажав Открыть.
Далее, разрешите Установить сертификат
и следуйте указаниям Мастера импорта сертификатов.
При установке, выберите хранилище Доверенные корневые центры сертификации
Нажмите кнопку Готово и завершите установку сертификата.
Удалите устаревший корневой сертификат DST Root CA X3, чтобы он не мешал нормальной работе с сервисами, которые используют сертификаты Let’s Encrypt.
Проверьте работу тех сервисов, с доступом к которым у вас до этого возникали проблемы.
Для MacOS пока что только одна рекомендация — обновить систему.
Don’t Let Replacing the Expired DST Root CA x3 Bring You Down
If you are using an older Mac OS X version to browse the web, it’s likely that you recently started seeing «NET::ERR_CERT_DATE_INVALID», «Your connection is not private», «Clock expired privacy issue», «Safari can’t verify the identity of the website», or a similar error in your browser, when trying to visit sites that should be safe.
The error is probably occurring on your older computer because the popular certificate DST root ca x3
from the certificate authority Let’s encrypt expired on September 30, 2021. You need its replacement isrg root x1
to resolve the NET::ERR_CERT_DATE_INVALID error.
Your computer has a list of certificates that allow it to verify the authenticity of the websites you visit. OS updates usually include the latest batch of certificates required to verify most websites you might visit. However, you can also manually add certificates to your computer’s certificate store.
Manually Adding Certificates on Mac OS El Capitan
Here is how to add the isrg root x1
certificate on Mac OS El Capitan. The process is very similar on other Mac OS versions as well.
Step 1: Get the legit isrg root x1 certificate from Let’s encrypt by visiting https://letsencrypt.org/certs/isrgrootx1.pem.txt. If the Lets Encrypt site itself is marked as insecure for you, you can download it from here: https://intellitect.com/wp-content/uploads/2022/03/isrgrootx1.pem_.txt (don’t make downloading certs from websites a habit though).
Don’t let the encoding of the file intimidate you.
Step 2: Save it by right-clicking on the page and clicking save as (or if in Safari, click File > Save as ).
Step 3: Save it as a .pem file (remove the .txt extension).
You now have a file that looks like this:
Step 4: Open the file. The file opens with Mac OS’s certificate store called Keychain Access.
If it doesn’t open with KeyChain Access, then open the KeyChain Access app manually by either searching for it via Spotlight ? or finding it in the Utilities App Folder. Then drag and drop the .pem file into KeyChain Access.
Step 6: Now, we need to mark it as trusted.
Find it in the certificates, and open it. Under the Trust drop-down ? (double click to open), set the SSL field as always trusted.
Step 7: Close and save.
Wrapping Up!
You should be able to use SSL (HTTPS) with it now! Wikipedia.org is a site that you wouldn’t be able to visit without SSL backed by isrg root x1
, so give it a try.
Want More?
Need more information on fixing errors like «NET::ERR_CERT_DATE_INVALID»? Check out Mark Michaelis’ quick fix for the NETSDK1004 compile error. Curious about the software development work IntelliTect does? Check out our innovative products to see what software solutions we offer that solve your real-world issues.
Does Your Organization Need a Custom Solution?
Let’s chat about how we can help you achieve excellence on your next project!
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
<!— —>
By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.
Already on GitHub?
Sign in
to your account
pepemou opened this issue
May 19, 2021
· 17 comments
Comments
Hello from the staff at Let’s Encrypt.
On September 30, there will be a change in how older browsers and devices trust Let’s Encrypt certificates, resulting in a minor decrease in compatibility. If you run a typical website, you won’t notice a difference. Devices and browsers running up-to-date software will continue working fine, and we’ve taken steps to make sure the vast majority of older devices will too. If you run a large website, or need to support less common software (particularly non-browser software), you’ll want to read about the details at:
In either case, no action is required from you. We’re letting you know so you can provide answers to any questions your site visitors may have.
Here is a sample hostname from one of your current Let’s Encrypt certificates: exampledomain.com
— The Let’s Encrypt team
My certificates are generated in win-acme (for WServer 2019) for apache (not ISS).
Do you know if this Let’s Encrypt change is a problem in win-acme?
Thanks for advance.
The option to specify a preferred chain was added in v2.1.13 onwards, see https://github.com/win-acme/win-acme/releases/tag/v2.1.13
The certificate chain displayed in Chrome is not the actual certificate chain, it’s just one path the browser has been able to use to validate the chain — I can only pretend to fully understand it though 🙂 As the Let’s Encrypt R3 intermediate is cross signed by DST Root CA X3 this means it usually appears in the certificate UI as being the root. The actual chains are explained here: https://letsencrypt.org/certificates/ — I find opening the certificate in Windows Explorer to see the individual certificates in the chain helps.
Let’s Encrypt decided to continue to use an expired root by default, by way of a special agreement with IdenTrust in order to allow older android devices to keep working https://letsencrypt.org/2020/12/21/extending-android-compatibility.html — this does have an impact though, so when the root does expire some other system who validate the root may fail. So the correct chain to use depends on your exact requirements
I just renewed my cert, so it will expire after October 2021, the root DST Root CA X3 will expire before.
So now I change the current date of my browser to October 2nd. That´s is fine for my certificate, but not for the root.
And so Chrome and Edge both are telling me the connection is not trused.
So do you still think that there are more chains and to default chain that leeds to expired roots and expired intermediate R3 is just one of many?
This blog explains the current status quo: https://letsencrypt.org/2020/12/21/extending-android-compatibility.html
I can confirm that the subscriber certificates of both the «green» (new default chain) and «blue» (alternate chain) paths have the same thumbprints and are byte-by-byte identical. So it all comes down on how the chain is computed, which depends on both client and server.
On my development machine I’ve noticed there are two version of R3 in the intermediate certification authorities store. One signed by DST Root CA X3 that expires 1 day before its parent (which provides the «red» chain) and the other version of R3 is signed by ISRG Root X1 so it provides the new paths. After I deleted the older version of R3 from my local store I could see the certification root as shown by Windows/Chrome uupdate immedately when checking Let’s Encrypts very own test page https://valid-isrgrootx1.letsencrypt.org/.
So somehow, the «red» chain is just preferred by Windows. Maybe because it’s shorter, maybe because D
comes before I
in the alphabet, who knows? Though obviously it won’t be preferred anymore once it expires, so it shouldn’t neccesarry for anyone to manually delete the old R3.
Thank you for your explanation.
I can confirm that I have two R3 on my (windows 2019 IIS application) server, when I remove the R3 (that will expire on September 29) than the chain used changes in Firefox. It does not change in Chrome and Edge. At the same time we have our web site (running on php, using different acme client) with the (alternate) chain that is supposed to be used (Cert -> R3 -> ISRG Root X1 -> DST Root CA X3), all on the same client (mac) in the same browser (chrome, edge, safari).
Will this change when I select the alternate chain when requesting the certificate through the option?
"Acme": {
"PreferredIssuer": "ISRG Root X1",
...
}
I could not find any further documentation about this option, so any information will help.
I would not want to wait until September 29 (when the old R3 expires) to find out that it´s not working.
I can confirm that I have two R3 on my (windows 2019 IIS application) server, when I remove the R3 (that will expire on September 29) than the chain used changes in Firefox. It does not change in Chrome and Edge.
From my observations (Windows/Chrome), it also matters which certificates you have installed on the client. If you did some testing with ACME clients on your machine, you may also have two R3’s there.
At the same time we have our web site (running on php, using different acme client) with the (alternate) chain that is supposed to be used (Cert -> R3 -> ISRG Root X1 -> DST Root CA X3)
Most likely you’re using Apache or nginx for that PHP website. I know that with those two webservers, you can (and have to be) be very explicit in which chain you want to publish, because the chain is basically a file somewhere on your disk. In case of Windows/IIS a lot more magic is involved, because by default all parts of a chain are saved seperately and later reassembled.
Will this change when I select the alternate chain when requesting the certificate through the option?
When doing some checking for this issue, I found a bug in that feature. Previously Let’s Encrypt was aiming to fix the rollover by having two 2-step chains, but now they ended up using a 3-step chain as a default. The current release doesn’t recognize that 3-step chain as it should. The net result is that whatever you configure, the default chain is picked. A build with a fix for that is available here: https://ci.appveyor.com/project/WouterTinus/win-acme-s8t9q/build/artifacts.
So with that build you can force the program to choose the «modern» chain, though obviously it doesn’t influence anything at the level of IIS/Windows/clients which — IMO — are most likely to completely ignore it.
- I recommend using https://www.ssllabs.com/ to see what IIS actually pushes over the line, instead of trusting the browser to assemble the chain on the client.
- I suggest (like I did to @niklasholm back then) to try using the Central Certificate Store feature of IIS to see if that might influence the way the chain is assembled. With that feature, a complete
.pfx
file with a full chain is linked to a binding rather than only a thumbprint pointing to the «store». So that’s much closer to what Apache/nginx do and might get rid of some magic.
Thank you for your explanation.
I will remove the old R3 once more and check with ssllabs.com.
Let’s Encrypt decided to continue to use an expired root by default, by way of a special agreement with IdenTrust in order to allow older android devices to keep working https://letsencrypt.org/2020/12/21/extending-android-compatibility.html — this does have an impact though, so when the root does expire some other system who validate the root may fail. So the correct chain to use depends on your exact requirements
As of right now, I had to manually download a cross-signed intermediate certificate to get our Android app working (on older devices). If I understand it correctly, once the root DST certificate expires (in September), while the Android app will continue working, accessing the website from other clients (e.g desktop browser) might result in an error due to the root certificate being expired? I thought due to the ISRG Root being present in the new default chain, clients which validate notAfter won’t complain either.
What I don’t understand at all is why is this needed? Considering the chart available on the link you posted I thought android devices should be supported out of the box because the new default chain comes from the DST root.
My understanding of the chart is something like
- red — ok for old android, bad for other devices
- green — ok for everything
- blue — ok for new devices, problematic for android
Edit: after updating win-acme to the latest version the default chain works on android devices too. Why is this the case? I was under the impression that ACME server decides what certificates are sent back and so the client version should be somewhat irrelevant
What I don’t understand at all is why is this needed? Considering the chart available on the link you posted I thought android devices should be supported out of the box because the new default chain comes from the DST root.
That is also my understanding. Everything should simply keep working out of the box, due to the fact that ISGR X1 is trusted as a root authority on most systems, but on an old Android it can fall back to the expired DST which grants trust to ISGR X1.
My expectation is that a lot of the ambiguity will be resolved though once the old R3 expires (one day before DST expires).
Edit: after updating win-acme to the latest version the default chain works on android devices too. Why is this the case? I was under the impression that ACME server decides what certificates are sent back and so the client version should be somewhat irrelevant.
Which version were you using before and which version are you using now? Have you set a preferred issuer in your configuration file?
Which version were you using before and which version are you using now? Have you set a preferred issuer in your configuration file?
It was a 2.x version, unsure about minor/patch version and I update the client to the latest available version for download on the website.
Using WACS on Windows Server. I’ve had PreferredIssuer set to null for quite a while, but I notice that the root is still using R3 instead of ISRG Root X1. I set PreferredIssuer to «ISRG Root X1» and ordered brand-new certificates, and it’s still using R3. When I view the SSL certificate, it shows R3 and that the root expires on September 29, 2021. How can I force all new certs and renewals to use «ISRG Root X1»? What will happen after September 29th?
Found a solution, see my comment in #1918
Short: Install the right R3 intermediate with ex. 2025 in localmachine cert store for intermediates, disable all purposes of old intermediate R3 in the same cert store.
v2.1.19 was released today with a fix to the PreferredIssuer setting.
Before everything was working, but now I can’t get LetsEncrypt certificate for my site https://mafia-game.net (and the game API on the same domain) to work on Android 7.0 (JoyPro device). It says «Server’s certificate is not trusted». Issued by R3, Let’s Encrypt, Valid from Sept,30-Dec,29, 2021. The device date/time is correct. All other devices works fine (PC, iPhone 10 and Galaxy S7 (Android 8.0). Is anything I can do about it?
Thank you. I switched to ZeroSSL, it turns out to be easy (5 minutes to switch). Now all seems working. Interestingly that my Ubuntu servers don’t have such problem with Let’s Encrypt. I continue using Let’s Encrypt on Ubuntu 18 servers without any issue. Just checked it works just fine with Android 7 device.
Please be aware that the «IdenTrust DST Root CA X3» root expiring on 9/30/2021 has been replaced with the «IdenTrust Commercial Root CA 1» self-signed root which is also trusted by the major browsers and root stores since 1/16/2014. You may download the IdenTrust Commercial Root CA 1 at this link: Root Certificate Download.
If you have appliances that are not dynamically updating the root trust chain, they need to be manually updated with the self-signed «IdenTrust Commercial Root CA 1» which can be downloaded at this link: Root Certificate Download.
Federal CA Certificates
Federal CA Root Certificate Download — All certificate types
DoD ECA
DOD ECA Root Certificate Download — All certificate types
IdenTrust ECA S23 CA Certificate Download — All certificate types
IdenTrust Global Common (IGC)
IGC Root Certificate Download – for Individual and Affiliated Certificates
IGC Root Certificate Download – for Device Certificates
IdenTrust SAFE-BioPharma
IdenTrust SAFE-BioPharma Root Certificate Download
IdenTrust Commercial
IdenTrust Publicly Trusted Roots Test Certificates Page
IdenTrust Commercial Root Certificate Download – for Individual and Business Certificates
IdenTrust Commercial Root Certificate Download – for TLS/SSL Certificates
IdenTrust Public Sector
IdenTrust Publicly Trusted Roots Test Certificates Page
IdenTrust Public Sector Root Certificate Download – for Individual and Business Certificates
TrustID HID Enterprise CA 1
IdenTrust DST Root CA X3
Please be aware that the «IdenTrust DST Root CA X3» root expiring on 9/30/2021 has been replaced with the «IdenTrust Commercial Root CA 1» self-signed root which is also trusted by the major browsers and root stores since 1/16/2014. You may download the IdenTrust Commercial Root CA 1 at this link: Root Certificate Download.
If you have appliances that are not dynamically updating the root trust chain, they need to be manually updated with the self-signed «IdenTrust Commercial Root CA 1» which can be downloaded at this link: Root Certificate Download.
DST Root CA X3 Cross-Signing with IdenTrust Commercial CA 1 Chain Details
DST Root CA X3-IdenTrust Commercial CA 1 Chain Download
30 сентября 2021 14:01:15 GMT оканчивается срок действия корневого сертификата IdenTrust DST Root CA X3.
Это событие достойно вашего внимания по той причине, что после наступления этого момента ряд устаревших систем перестанут доверять сертификатам, выпущенным центром сертификации Let’s Encrypt. С учётом того, что на текущий момент Let’s Encrypt предоставляет бесплатные криптографические сертификаты примерно для 250 миллионов доменных имен, а «устаревшие системы» — это порой системы возрастом всего 5-6 лет, вряд ли окончание срока действия сертификата DST Root CA X3 пройдёт для всех гладко и незаметно. В чём причина, кого конкретно это затронет, и что можно сделать?
Немного теории и истории
Не углубляясь в детали, пару слов для неспециалистов, почему окончание срока действия сертификата DST Root CA X3 повлияет на сертификаты, выпущенные Let’s Encrypt. У каждой системы, проверяющей сертификат на валидность, есть своё хранилище доверенных корневых сертификатов. Система при проверке будет доверять сертификатам, которые подписаны с использованием закрытого ключа одного из этих корневых сертификатов. Сами корневые сертификаты как правило имеют длительные сроки действия, меняются редко и не используются при формировании сертификатов конечного субъекта (в данном случае, сертификатов для доменных имен), вместо этого инфраструктура открытых ключей, предполагает использование цепочек доверия — корневые сертификаты применяются для подписания промежуточных сертификатов, а уже с использованием них подписываются сертификаты конечного субъекта (сертификаты для доменов). При этом, для того, чтобы система доверяла конечному сертификату, она должна быть способна проследить всю цепочку от этого сертификата до одного из корневых сертификатов, которым она доверяет.
После появления проекта Let’s Encrypt, его корневой сертификат ISRG Root X1 (как и любой новый корневой сертификат) не мог быстро попасть в хранилища доверенных сертификатов заметного количества систем. При этом для успешного функционирования проекта выданным сертификатам с самого начала должно было доверять максимальное количество систем «из коробки» (без дополнительных действий со стороны пользователей этих систем). В связи с этим, для сертификатов Let’s Encrypt стала использоваться цепочка доверия, ведущая к корневому сертификату DST Root CA X3, который признается большинством систем:
К настоящему моменту корневой сертификат ISRG Root X1 существует уже более 5 лет и за это время попал в доверенные в большинстве современных систем, ему доверяют:
Windows >= XP SP3 (при условии, что производилось автоматическое обновление корневых сертификатов)
macOS >= 10.12.1
iOS >= 10
Android >= 7.1.1
Mozilla Firefox >= 50.0
Ubuntu >= xenial / 16.04 (с установленными обновлениями)
Debian >= jessie / 8 (с установленными обновлениями)
Java 8 >= 8u141
Java 7 >= 7u151
NSS >= 3.26
Для сертификатов Let’s Encrypt по умолчанию в данный момент предлагается такая цепочка доверия:
IdenTrust’s DST Root CA X3 -> ISRG Root X1 -> Let’s Encrypt R3 -> Конечный сертификат пользователя
Что произойдет 30 сентября?
Срок действия DST Root CA X3 подходит к концу 30 сентября 2021 14:01:15 GMT, что произойдет после этого?
Те системы, которые не доверяют ISRG Root X1, перестанут доверять сертификатам, выпущенным Let’s encrypt (системы будут выдавать предупреждения при посещении сайтов, использующих сертификаты Let’s Encrypt). За исключением Android >= v2.3.6, т.к. Android не учитывает срок действия своих доверенных корневых сертификатов.
Проблема с доверием возникнет также у систем, использующих OpenSSL версии меньше 1.1.0. Даже если у таких систем ISRG Root X1 входит в список доверенных сертификатов, особенность проверки сертификата в OpenSSL 1.0.x приведёт к тому, что наличие в цепочке истекшего DST Root CA X3, несмотря на наличие доверия к ISRG Root X1, будет приводить к отрицательному результату проверки на доверие. Аналогичная проблема у OpenSSL 1.0.x возникла 20 мая 2020 года с истекшим сертификатом AddTrust External CA Root.
Что со всем этим делать?
На стороне клиента
Linux
Для того, чтобы проверить, как поведёт себя ваша система при обращении к сайтам, использующим сертификаты Let’s Encrypt, после 30 сентября, можно воспользоваться утилитой faketime. В Debian и Ubuntu она доступна в пакете faketime.
Если всё в порядке, curl вернёт содержимое страницы, если же нет — выдаст сообщение об ошибке:
curl: (60) server certificate verification failed.
В этом случае нужно убедиться, что:
Ваша система доверяет ISRG Root X1
Вы не пользуетесь устаревшей версией OpenSSL
Проверка доверия к ISRG Root X1
Например, Ubuntu 16.04 xenial и Debian 8 jessie доверяют ISRG Root X1, но при этом поставляются с OpenSSL 1.0.x, поэтому проблема их может коснуться.
Чтобы проверить наличие сертификата ISRG Root X1 в числе доверенных:
В выводе команды в обоих случаях должно присутствовать:
subject= /C=US/O=Internet Security Research Group/CN=ISRG Root X1
Если такой строчки нет, то нужно добавить ISRG Root X1 в доверенные. В Debian/Ubuntu:
добавить в файл /etc/ca-certificates.conf строчку:
и выполнить комнаду
Проверка версии OpenSSL
Если система доверяет ISRG Root X1, нужно проверить версию OpenSSL
В выводе должна быть версия 1.1.0 или новее.
Если используется OpenSSL 1.0.x, то достаточным решением проблемы будет удалить из доверенных сертификат DST Root CA X3 (это решение может не сработать для openssl версий <1.0.1p и <1.0.2d). Это можно сделать, не дожидаясь 30 сентября.
В файле /etc/ca-certificates.conf нужно найти строчку:
и поставить в начало сроки символ «!»:
Далее, необходимо выполнить команду:
Локальное продление срока действия сертификата DST Root CA X3
Для тех случаев, когда используется совсем старый openssl (версии меньше 1.0.1p и 1.0.2d, но новее 0.9.8m), или по иной причине не срабатывает метод с изъятием из доверенных сертификата DST Root CA X3, можно воспользоваться еще одним методом, предложенным в статье Scott’а Helme. Метод основан на том, что OpenSSL, начиная с версии 0.9.8m, не проверяет сигнатуру сертификатов, хранящихся в локальном защищенном хранилище. Таким образом, можно изменить время действия сертификата в защищенном хранилище, при этом модифицированный сертификат будет по-прежнему восприниматься OpenSSL как валидный. Для того, чтобы продлить для OpenSSL на системе срок действия сертификата DST Root CA X3 еще на три года можно выполнить следующие команды:
sudo sed -i "s/xMDkzMDE0MDExNVow/0MDkzMDE4MTQwM1ow/g" /etc/ssl/certs/DST_Root_CA_X3.pem
sudo sed -i "s/xMDkzMDE0MDExNVow/0MDkzMDE4MTQwM1ow/g" /etc/ssl/certs/ca-bundle.crt
Не забудьте проверить так же все ваши контейнеры!!! У них свои хранилища корневых сертификатов и могут использоваться другие версии openssl
Windows
В мастере импорта сертификатов выбрать «Локальный компьютер»:
На последнем шаге мастера нажать кнопку «Готово».
После выполнения этой последовательности шагов, сертификат должен появиться в защищенном хранилище. Чтобы проверить это, нужно нажать комбинацию клавиш «Win+R», откроется диалог «Выполнить», в котором нужно ввести certmgr.msc
В открывшемся окне в подразделе «Сертификаты» раздела «Доверенные корневые центры сертификации» в списке должен появиться сертификат ISRG Root X1:
На стороне сервера
На стороне сервера от вас мало что зависит. Если вы используете сертификаты от Let’s Encrypt на своем сервере, то должны понимать, что после 30 сентября 2021 14:01:15 GMT к вашему серверу смогут без проблем подключиться только клиенты, доверяющие ISRG Root X1 (см. список выше), а также использующие Android >= v2.3.6. При этом, если клиенты используют OpenSSL, то они должны пользоваться версией OpenSSL >= 1.1.0.
При этом, у вас есть выбор — ценой отказа от поддержки старых Android (оставив поддержку Android >= 7.1.1), вы можете сохранить поддержку OpenSSL 1.0.x без манипуляций на стороне клиента.
Для этого нужно использовать предлагаемую Let’s Encrypt альтернативную цепочку доверия для своих сертификатов. В этой цепочке исключен DST Root CA X3 и выглядит она так:
ISRG Root X1 -> Let’s Encrypt R3 -> Конечный сертификат пользователя
Для переключения на альтернативную цепочку нужно воспользоваться документацией вашего ACME-клиента. В частности, в certbot за возможность выбора альтернативной цепочки отвечает параметр —preferred-chain.
Итоги
30 сентября после окончания срока действия сертификата DST Root CA X3 часть пользователей старых устройств столкнутся с тем, что не смогут корректно открывать сайты, использующие сертификаты Let’s Encrypt. Я бы выделил в первую очередь пользователей старых устройств Apple, для которых нет возможности обновиться хотя бы на iOS 10. Кроме того, под раздачу могут попасть различные устройства IoT, старые телевизоры и подобные им устройства, для которых не существует обновлений с новыми корневыми сертификатами.
В то же время, для администраторов серверов с не очень современным софтом, которые могут взаимодействовать с сервисами, использующими сертификаты Let’s Encrypt, еще есть несколько дней на то, чтобы всё проверить и подготовиться к часу X.
Update: Добавил важное дополнение про необходимость проверки всех используемых контейнеров
Update3: Еще один метод решения проблемы для старых OpenSSL, процедура по добавлению сертификата ISRG Root X1 в доверенные в Windows для тех, кто еще не разобрался