(forgive the anonymity, I read the faq but I don't want to publicise my customer's security holes)
I've successfully installed Let's Encrypt via acme.sh on multiple hosts at a customer site which are running Centos 6 and OpenSSL 1.0.1e-fips and Apache 2.2.15 (*) via these commands:
/root/.acme.sh/acme.sh --issue -d host.example.com --webroot /www/root/dinosaurapp --server letsencrypttest --staging --debug
/root/.acme.sh/acme.sh --issue -d host.example.com --webroot /www/root/dinosaurapp --server letsencrypt --force (once above was working)
for most websites we see something like the below:
openssl s_client -showcerts -connect foo.example.com:443
0 s:CN = foo.example.com
i:C = US, O = Let's Encrypt, CN = R3
a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
v:NotBefore: Nov 11 23:19:27 2023 GMT; NotAfter: Feb 9 23:19:26 2024 GMT
1 s:C = US, O = Let's Encrypt, CN = R3
i:C = US, O = Internet Security Research Group, CN = ISRG Root X1
a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
v:NotBefore: Sep 4 00:00:00 2020 GMT; NotAfter: Sep 15 16:00:00 2025 GMT
But one and only one website has the extra entry #2 below. The other Centos6 hosts are failing to connect to this one because of the expired entry in the chain, which I believe is the old cross-signed cert:
openssl s_client -showcerts -connect bar.example.com:443
0 s:CN = bar.example.com
i:C = US, O = Let's Encrypt, CN = R3
a:PKEY: id-ecPublicKey, 256 (bit); sigalg: RSA-SHA256
v:NotBefore: Nov 23 02:39:46 2023 GMT; NotAfter: Feb 21 02:39:45 2024 GMT
1 s:C = US, O = Let's Encrypt, CN = R3
i:C = US, O = Internet Security Research Group, CN = ISRG Root X1
a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
v:NotBefore: Sep 4 00:00:00 2020 GMT; NotAfter: Sep 15 16:00:00 2025 GMT
2 s:C = US, O = Internet Security Research Group, CN = ISRG Root X1
i:O = Digital Signature Trust Co., CN = DST Root CA X3
a:PKEY: rsaEncryption, 4096 (bit); sigalg: RSA-SHA256
v:NotBefore: Jan 20 19:14:03 2021 GMT; NotAfter: Sep 30 18:14:03 2024 GMT
What could I have done differently here to get this different outcome, and how do we remove that last insecure entry? To add to the challenge, none of the (supposedly) identical development hosts picked up this entry in their chains.
The only other difference I do see in this one is the smaller key
The different host also had this slightly different Apache conf :
SSLCertificateFile /root/.acme.sh/bar.example.com_ecc/bar.example.com.cer
SSLCertificateKeyFile /root/.acme.sh/bar.example.com_ecc/bar.example.com.key
SSLCertificateChainFile /root/.acme.sh/bar.example.com_ecc/fullchain.cer
SSLCACertificateFile /root/.acme.sh/bar.example.com_ecc/ca.cer
however changing it to match the others had no effect:
SSLCertificateFile /root/.acme.sh/bar.example.com_ecc/bar.example.com.cer
SSLCertificateKeyFile /root/.acme.sh/bar.example.com_ecc/bar.example.com.key
SSLCACertificateFile /root/.acme.sh/bar.example.com_ecc/fullchain.cer
I'm slogging through trying to get the old cert out of the root store on the Centos6 boxes, or fake the expiration date, as discussed elsewhere on this site, but I'd rather get the cert out of the chain for fear that touching openssl might break the antique business application software.
Thank you for any clues on how to keep this breathing until it can get a brain transplant. Worst case is we buy a new commercial cert but we'd really like to make this work.
(*) The are aware of how hideously ancient this all is. However, upgrading the OS is blocked pending other efforts to port, upgrade, or replace the even more obsolete application software, which depends on obsolete packages, and so on. Meanwhile, I don't want to be the one to topple the Jenga blocks.