На одному дуже старому сервері виникла проблема з curl
# curl https://domain.com curl: (60) SSL certificate problem: certificate has expired More details here: http://curl.haxx.se/docs/sslcerts.html curl performs SSL certificate verification by default, using a "bundle" of Certificate Authority (CA) public keys (CA certs). If the default bundle file isn't adequate, you can specify an alternate file using the --cacert option. If this HTTPS server uses a certificate signed by a CA represented in the bundle, the certificate verification probably failed due to a problem with the certificate (it might be expired, or the name might not match the domain name in the URL). If you'd like to turn off curl's verification of the certificate, use the -k (or --insecure) option.
Здавалося б, треба оновити (я зробив rsync 1:1) список сертифікатів і все. Але навіть, після оновлення проблема не зникла. Давайте дивитися “глибше”:
# strace -o /tmp/curl.trace curl https://domain.com ... stat("/etc/ssl/certs/2e5ac55d.0", {st_mode=S_IFREG|0644, st_size=1200, ...}) = 0 open("/etc/ssl/certs/2e5ac55d.0", O_RDONLY) = 4 fstat(4, {st_mode=S_IFREG|0644, st_size=1200, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fd779e34000 read(4, "-----BEGIN CERTIFICATE-----\nMIID"..., 4096) = 1200 read(4, "", 4096) = 0 close(4) = 0 munmap(0x7fd779e34000, 4096) = 0 stat("/etc/ssl/certs/2e5ac55d.1", 0x7fff50e04ac0) = -1 ENOENT (No such file or directory) ...
Якщо уважно подивитися вивід strace то ми побачимо згадування тільки цього сертифікату і більше ніяких. Давайте подивимося, що з ним не так:
# openssl x509 -text -noout -in /etc/ssl/certs/2e5ac55d.0 | grep Not Not Before: Sep 30 21:12:19 2000 GMT Not After : Sep 30 14:01:15 2021 GMT
Тепер зрозуміло. Треба видалити його звідусіль. Візьмемо якусь частину вмісту сертифікату і пошукаємо, де, він може бути:
# grep -r 5v3gTt23ADq1cEmv8uXr /etc/ssl/certs /etc/ssl/certs/ca-certificates.crt:ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
Також видаляємо рядок mozilla/DST_Root_CA_X3.crt з /etc/ca-certificates.conf ну і сам сертифікат
# rm /etc/ssl/certs/2e5ac55d.0 /etc/ssl/certs/DST_Root_CA_X3.pem
PS. дуже дивно, що на новому сервері з таким же набором все працює. Може в новій версії додали ігнорування протермінованих сертифікатів.