Die Autorität des Ausstellers kann nicht lokal überprüft werden

19

Ich kann keine https-URLs mit wget oder curl öffnen:

$ 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.

Dies verwendet wget 1.12 und curl 7.30.0 unter CentOS 5.5. Es hört sich so an, als ob etwas mit meinem lokalen Zertifikatspeicher nicht stimmt, aber ich habe keine Ahnung, wie ich fortfahren soll. Irgendwelche Ideen?

Update: Nach dem Upgrade des openssl-Pakets von 0.9.8e-12.el5_4.6 auf 0.9.8e-33.el5_11 tritt jetzt ein anderer Fehler auf:

$ 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'.
akust
quelle
Ich denke, die Stammzertifikate sind im ca-certificatesPaket enthalten. Ist dieses Paket installiert? Vielleicht versuchen Sie es erneut zu installieren. Wenn dies nicht das Problem ist, führen Sie strace -o /tmp/wget.strace wget https://www.python.orgden resultierenden Trace aus und veröffentlichen Sie ihn. Dies sollte uns mitteilen, wo das Problem liegt.
Gilles 'SO- hör auf böse zu sein'
@Gilles - Ich habe das openssl-Paket von 0.9.8e-12.el5_4.6 auf 0.9.8e-33.el5_11 aktualisiert und der Fehler ist behoben (möglicherweise wurden die Stammzertifikate neu installiert?), Aber jetzt ist ein anderer Fehler aufgetreten.
akustische
Das sieht aus wie ein vorübergehender Fehler mit dieser bestimmten Site. Funktionieren andere Websites?
Gilles 'SO- hör auf böse zu sein'
@ Gilles - Andere Websites funktionieren auch nicht. Beispielsweise gibt Google den Fehler zurück: Der allgemeine Name des Zertifikats "google.com" stimmt nicht mit dem angeforderten Hostnamen "www.google.com.au" überein.
akustisch
Ich könnte das gleiche Problem beheben, indem ich Selinux deaktiviere: crypt.gen.nz/selinux/disable_selinux.html Prost!

Antworten:

4

Das Problem ist die mangelnde Unterstützung für die Angabe des Servernamens. Du brauchst mindestens wget 1.14 oder curl 7.18.1 und du brauchst mindestens OpenSSL 0.98f, laut Wikipedia:

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

Chuck E
quelle
1
Ich benutze: GNU Wget 1.19.4 und OpenSSL 1.1.1 und bekomme immer noch den gleichen Fehler.
5.
2

wgetvor 1.14 unterstützt den alternativen Antragstellernamen (Subject Alternative Name, SAN) * nicht. PyPI verwendet ein SAN als Alternative zu seinem CN in seinem Zertifikat, und wget verschluckt sich an der Nichtübereinstimmung. Ein Upgrade von wget sollte das Problem beheben.

* oder möglicherweise Server Name Indication (SNI) - Ich bin nicht sicher, welche hier gilt.

Verweise:

Heath Raftery
quelle
1

Lösung 1:

openssl s_client -connect whateversite.com:443 -debug 

Holen Sie sich den Zertifikatsschlüssel und kopieren Sie ihn nach /etc/ssl/certs.

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

Wenn Sie unsicher werden möchten, versuchen Sie es mit der Lösung 2

Lösung 2:

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

oder mit Curl

$ curl https://www.python.org --insecure
Ruban Savvy
quelle
9
„Doktor, ich kann nicht auf meinem linken Bein gehen. - Lösung 1: Stellen Sie das, was Sie brauchen, in die Nähe Ihres Stuhls, damit Sie nicht stehen müssen. Lösung 2: Hop. “Nein, die Lösung besteht darin, das Problem zu beheben. Dies bedeutet hier, dass die Stammzertifizierungsstellenzertifikate repariert oder erneut installiert werden.
Gilles 'SO- hör auf böse zu sein'
4
Dies gilt nur für selbstsignierte selbst ausgestellte Zertifikate
Pavel Niedoba
1
Ja, das ist eine schlechte Idee. Lösung 1 ist unsicher zu . Alles, was Sie tun, ist, die Überprüfung von wget zu umgehen, indem Sie dem Zertifikat von diesem Punkt an automatisch vertrauen. Sie sollten das zugrunde liegende Problem beheben, indem Sie die Stammzertifikate reparieren, auf die wget Zugriff hat.
Andrew Ferrier
Dies ist zwar nur eine Problemumgehung, wenn Ihre Sysadmins Sie dazu zwingen, beschädigte Stammzertifikatslisten oder drakonische Sicherheitseinstellungen zu verwenden, aber es verdient keinen Hass.
Nurettin
0

Aktualisieren Sie die Uhrzeit auf dem Server. Eine Sekunde kann dieses Problem verursachen!

Erkundigen Sie sich bei: 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
quelle
0

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

Robert A
quelle
1
Es ist ziemlich gefährlich, dies vorzuschlagen.
Ploth
Dies betrifft nur wgetBefehle und ist keine Lösung, sondern eine Problemumgehung.
mrc02_kr