Existem várias bibliotecas criptográficas no seu sistema:
- OpenSSL (o padrão ouro, com uma licença estilo BSD (muito grátis) que inclui uma cláusula problemática (impedindo a compatibilidade GPL, mas nada de “ruim”) limitando sua adoção no mundo GNU)
- GnuTLS (a substituição da FSF; vem em dois tipos, licenciada pela LGPLv2 (mas sem manutenção) e licenciada pela LGPLv3 (e portanto incompatível com programas somente da GPLv2), historicamente não tão cheia quanto OpenSSL, um pouco mais bugs, mas mais estrito também, o que aumenta a segurança)
- NSS (biblioteca do Netscape / Mozilla, raramente usada fora; demora para adotar novos padrões)
- menores como PolarSSL, MatrixSSL, NaCl / Salt
Todos eles têm, é claro, semelhanças e diferenças. O software que os usa (para fins criptográficos ou para usar SSL / TLS) às vezes suporta o uso de mais de uma dessas bibliotecas (por exemplo, o Lynx, normalmente vinculado ao OpenSSL, mas também suporta o GnuTLS (não tão bom) para apaziguar o povo GNU).
O cURL também é um dos projetos que apóiam o uso de uma das três principais bibliotecas de criptografia. Isto é principalmente porque cURL é, primário, uma biblioteca destinada a ser usada por outros programas quando eles querem baixar (ou até carregar) coisas usando conexões http, ftp, etc. A ferramenta de linha de comando curl
pode vir de uma dessas variantes.
Agora, tenho quase certeza de que o problema que você está vendo no sistema não recém-instalado é o seguinte:
O OpenSSL e o GnuTLS suportam o uso de diretórios CA no estilo /etc/ssl/certs/<hash>.<number>
. No entanto, o OpenSSL versão 0.xe o GnuTLS usam um algoritmo diferente para calcular o hash mencionado que o OpenSSL versão 1.x usa. (Ambos podem coexistir em um sistema; se certificados diferentes tiverem o mesmo hash você apenas usa um número diferente para eles. Mas por algum motivo, o pacote ca-certificates
do Debian / Ubuntu Além disso, algumas versões do GnuTLS não suportavam o uso do diretório, mas apenas o uso de um arquivo /etc/ssl/certs/ca-certificates.crt
(que também é normalmente gerenciado pelos scripts do mantenedor do pacote ca-certificates
, mas pode desviar); parece que você está usando uma versão mais antiga, então essa pode ser a coisa que você bateu.
openssl s_client
por padrão (ou seja, sem a opção -CApath
ou -CAfile
) não parece em qualquer lugar para certificados.
Seu curl
da instalação atualizada provavelmente usa uma biblioteca de criptografia diferente da curl
da nova instalação.
Teste openssl s_client -CAfile /etc/ssl/certs/ca-certificates.crt -connect the-problem-site.com:443
além de openssl s_client -CApath /etc/ssl/certs -connect the-problem-site.com:443
para imitar o comportamento de versões antigas do GnuTLS.
Verifique novamente se existe um OpenSSL 1.x em qualquer lugar no seu sistema (o Ubuntu é conhecido por esconder grandes atualizações mesmo em versões LTS), e se sim, verifique o hash do arquivo:
openssl x509 -noout -hash -in /etc/ssl/certs/GeoTrust_Global_CA.pem
openssl x509 -noout -subject_hash_old -in /etc/ssl/certs/GeoTrust_Global_CA.pem
openssl x509 -noout -subject_hash -in /etc/ssl/certs/GeoTrust_Global_CA.pem
Normalmente, o segundo e o terceiro comando devem falhar (OpenSSL 0.x), ou o primeiro e o terceiro comando devem exibir o mesmo hash, mas o segundo deve exibir um hash diferente (OpenSSL 1.x). O GnuTLS usaria a saída do segundo comando (se o OpenSSL 1.x estiver instalado); se o OpenSSL 0.x estiver instalado, é o mesmo hash. Você pode criar esses links simbólicos manualmente.
Eu posso atualizar esta postagem depois de fornecer feedback de depuração.