Não foi possível verificar localmente a autoridade do emissor

19

Não consigo abrir nenhum URL https usando wget ou curl:

$ wget https://www.python.org
--2015-04-27 17:17:33--  https://www.python.org/
Resolving www.python.org (www.python.org)... 103.245.222.223
Connecting to www.python.org (www.python.org)|103.245.222.223|:443... connected.
ERROR: cannot verify www.python.org's certificate, issued by "/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA":
  Unable to locally verify the issuer's authority.
To connect to www.python.org insecurely, use '--no-check-certificate'.

$ curl https://www.python.org
curl: (60) SSL certificate problem: unable to get local issuer certificate
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.

Isso está usando o wget 1.12 e curl 7.30.0 no CentOS 5.5. Parece que algo está errado com meu repositório de certificados local, mas não tenho idéia de como proceder a partir daqui. Alguma ideia?

Atualização: Após a atualização do pacote openssl de 0.9.8e-12.el5_4.6 para 0.9.8e-33.el5_11, agora existe um erro diferente:

$ wget https://pypi.python.org
--2015-04-28 10:27:35--  https://pypi.python.org/
Resolving pypi.python.org (pypi.python.org)... 103.245.222.223
Connecting to pypi.python.org (pypi.python.org)|103.245.222.223|:443... connected.
ERROR: certificate common name "www.python.org" doesn't match requested host name "pypi.python.org".
To connect to pypi.python.org insecurely, use '--no-check-certificate'.
aco
fonte
Eu acho que os certificados raiz estão no ca-certificatespacote. Este pacote está instalado? Talvez tente reinstalá-lo. Se esse não for o problema, execute strace -o /tmp/wget.strace wget https://www.python.orge poste o rastreamento resultante, que deve nos dizer onde está o problema.
Gilles 'SO- stop be evil'
@ Gilles - Atualizei o pacote openssl de 0.9.8e-12.el5_4.6 para 0.9.8e-33.el5_11 e o erro desapareceu (talvez isso tenha reinstalado os certificados raiz?), Mas agora existe um erro diferente.
Aco #
Parece um erro transitório neste site específico. Outros sites funcionam?
Gilles 'SO- stop be evil'
@ Gilles - Outros sites também não funcionam. Por exemplo, o Google retorna o erro: o nome comum do certificado "google.com" não corresponde ao nome do host solicitado "www.google.com.au".
Aco #
Eu poderia corrigir o mesmo problema ao desativar o Selinux: crypt.gen.nz/selinux/disable_selinux.html Cheers!

Respostas:

4

O problema é a falta de suporte à indicação de nome do servidor. Você precisa de pelo menos wget 1.14 ou curl 7.18.1 e precisa de pelo menos OpenSSL 0.98f, de acordo com a Wikipedia:

https://en.wikipedia.org/wiki/Server_Name_Indication#Implementation

Chuck E
fonte
1
Estou usando: GNU Wget 1.19.4 e OpenSSL 1.1.1 e ainda recebo o mesmo erro.
mchid 5/08
2

wgetanterior a 1.14 não suporta o nome alternativo do sujeito (SAN) *. O PyPI usa uma SAN como alternativa à sua CN em seu certificado, e o wget está sufocando com a incompatibilidade. A atualização do wget deve resolvê-lo.

* ou, possivelmente, Server Name Indication (SNI) - não tenho certeza do que se aplica aqui.

Referências:

Heath Raftery
fonte
1

Solução 1:

openssl s_client -connect whateversite.com:443 -debug 

Obtenha a chave do certificado e copie para /etc/ssl/certs.

$ wget https://www.python.org --ca-certificate=/etc/ssl/certsfile

Se você quer ir de maneira insegura, tente a solução 2

Solução 2:

$ wget https://www.python.org --no-check-certificate

ou usando Curl

$ curl https://www.python.org --insecure
Ruban Savvy
fonte
9
“Doutor, eu não posso andar na minha perna esquerda. - Solução 1: mova o que você precisa para perto da sua cadeira, para que você não precise ficar de pé. Solução 2: pule. ”Não, a solução é curar o problema. O que aqui significa reparar ou reinstalar os certificados de CA raiz.
Gilles 'SO- stop be evil'
4
este só é bom para auto emitidos certificados auto-assinados
Pavel Niedoba
1
Sim, isso é uma má ideia. Solução 1 é inseguro demais . Tudo o que você está fazendo é ignorar a verificação do wget confiando automaticamente no certificado a partir deste ponto. Você deve corrigir o problema subjacente corrigindo os certificados raiz aos quais o wget tem acesso.
precisa
Embora isso seja apenas uma solução alternativa, se seus administradores de sistema o forçarem a usar listas de certificados raiz quebradas ou configurações de segurança draconianas, ele não merece o ódio.
Nurettin
0

Atualize a hora no servidor. Um segundo pode causar esse problema!

Verificar com: date

Redhat / CentOS 6/7 yum -y install ntpdate; /usr/sbin/ntpdate -u pool.ntp.org

Ubuntu / Debian apt-get -y install ntpdate; /usr/sbin/ntpdate -u pool.ntp.org

user1926449
fonte
0

eco "check_certificate = off" >> ~ / .wgetrc

Robert A
fonte
1
Isso é bastante perigoso de sugerir.
Plot #
Isso diz respeito apenas ao wgetcomando e não é solução, mas solução alternativa.
Mrc02_kr 18/10/19