Puncte:0

WSL-Docker: curl: (60) nu se poate obține certificatul de emitent local

drapel cn

După o reconfigurare a computerului, nu pot folosi Docker în mod corespunzător, deoarece unele comenzi curl sunt respinse din cauza problemelor SSL/TLS.

Într-un singur exemplu curl -vfsSL https://apt.releases.hashicorp.com/gpg returnează următoarea eroare:

* Se încearcă 52.222.214.125:443...
* TCP_NODELAY setat
* Conectat la apt.releases.hashicorp.com (52.222.214.125) portul 443 (#0)
* ALPN, oferind h2
* ALPN, oferind http/1.1
* setați cu succes locațiile de verificare a certificatelor:
* CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), strângere de mână TLS, salut client (1):
* TLSv1.3 (IN), strângere de mână TLS, salut server (2):
* TLSv1.3 (OUT), TLS schimbă cifra, Schimbă specificația cifrului (1):
* TLSv1.3 (OUT), strângere de mână TLS, salut client (1):
* TLSv1.3 (IN), strângere de mână TLS, salut server (2):
* TLSv1.3 (IN), strângere de mână TLS, extensii criptate (8):
* TLSv1.3 (IN), strângere de mână TLS, Certificat (11):
* TLSv1.3 (OUT), alertă TLS, CA necunoscută (560):
* Problemă cu certificatul SSL: nu se poate obține certificatul emitentului local
* Închiderea conexiunii 0
curl: (60) Problemă cu certificatul SSL: nu se poate obține certificatul emitentului local
Mai multe detalii aici: https://curl.haxx.se/docs/sslcerts.html

curl nu a reușit să verifice legitimitatea serverului și, prin urmare, nu a putut
stabiliți o conexiune sigură cu acesta. Pentru a afla mai multe despre această situație și
cum să o remediați, vă rugăm să vizitați pagina web menționată mai sus.

După câteva săpături, acum știu că asta problema apare și în imaginea mea WSL, dar nu și pe sistemul de operare Windows gazdă. Prin urmare, cred că aceasta trebuie să fie o problemă care provine din configurarea mea WSL și nu cauzată de Docker însuși (?).

Există destul de multe întrebări legate de serverfault/stackoverflow, dar nicio soluție pe care am găsit-o nu se aplică cu adevărat în acest caz:

FWIW Lucrez la o întreprindere, cu sistem de operare IT.Evident, aceasta ar putea fi o sursă de eroare, dar nu mă pot ajuta să depanez această problemă. Cu toate acestea, pe computerul unui coleg, funcționează impecabil.

Vreo idee?


Configurare PC:

  • Windows 10 Enterprise
    • Versiune: 21H1
    • Versiunea sistemului de operare: 19043.1645
    • Windows Feature Experience Pack: 120.2212.4170.0
  • WSL 2 cu Ubuntu-20.04
  • Docker Desktop 4.7.1 (77678) cu motor bazat pe WSL 2

Actualizare 1

După cum sugerează @Martin, am încercat să descarc https://www.amazontrust.com/repository/AmazonRootCA1.pem, pune-l înăuntru /tmp în WSL Ubuntu și a rulat din nou comanda curl --cacert /tmp/AmazonRootCA1.pem -vfsSL https://apt.releases.hashicorp.com/gpg fara rezultat:

curl --cacert /tmp/AmazonRootCA1.pem -vfsSL https://apt.releases.hashicorp.com/gpg
* Încercând 52.222.214.72:443...
* TCP_NODELAY setat
* Conectat la apt.releases.hashicorp.com (52.222.214.72) portul 443 (#0)
* ALPN, oferind h2
* ALPN, oferind http/1.1
* setați cu succes locațiile de verificare a certificatelor:
* CAfile: /tmp/AmazonRootCA1.pem
  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), strângere de mână TLS, salut client (1):
* TLSv1.3 (IN), strângere de mână TLS, salut server (2):
* TLSv1.3 (OUT), TLS schimbă cifra, Schimbă specificația cifrului (1):
* TLSv1.3 (OUT), strângere de mână TLS, salut client (1):
* TLSv1.3 (IN), strângere de mână TLS, salut server (2):
* TLSv1.3 (IN), strângere de mână TLS, extensii criptate (8):
* TLSv1.3 (IN), strângere de mână TLS, Certificat (11):
* TLSv1.3 (OUT), alertă TLS, CA necunoscută (560):
* Problemă cu certificatul SSL: nu se poate obține certificatul emitentului local
* Închiderea conexiunii 0
curl: (60) Problemă cu certificatul SSL: nu se poate obține certificatul emitentului local
Mai multe detalii aici: https://curl.haxx.se/docs/sslcerts.html

curl nu a reușit să verifice legitimitatea serverului și, prin urmare, nu a putut
stabiliți o conexiune sigură cu acesta. Pentru a afla mai multe despre această situație și
cum să o remediați, vă rugăm să vizitați pagina web menționată mai sus.
Martin avatar
drapel kz
Aceasta este cel mai probabil o problemă cu fișierul local root-ca... fiecare sistem de operare trebuie să aibă o listă de CA rădăcină care sunt de încredere de sistemul dvs. de operare sau, în cazul dvs., subsistemul docker. Dacă CA rădăcină a gazdei de la distanță nu se află pe lista locală de CA de încredere, conexiunea este respinsă. Este prezent fișierul ```/etc/ssl/certs/ca-certificates.crt```?
casparjespersen avatar
drapel cn
Da, este. Conține numeroase certificate, se pare.
Martin avatar
drapel kz
descărcați ```https://www.amazontrust.com/repository/AmazonRootCA1.pem```, puneți-l în ```/tmp``` și executați din nou comanda astfel: ```curl --cacert / tmp/AmazonRootCA1.pem -vfsSL https://apt.releases.hashicorp.com/gpg``` - dacă acest lucru reușește, pachetului tău ca-certificates lipsește rădăcina Amazon ca!
casparjespersen avatar
drapel cn
@Martin Tocmai am încercat și, din păcate, acest lucru nu rezolvă problema. Mi-am actualizat întrebarea inițială cu detalii detaliate de ieșire din reluare.
drapel cn
Se poate conecta la crl?
casparjespersen avatar
drapel cn
@GregAskew Sunt un novice în acest domeniu. Voi avea nevoie de un pic mai direct pointer :) connect to crl .. Ce este asta, cum îl testez?
drapel cn
Punctul final trebuie să poată valida certificatul. O validare este conectarea la lista de revocare a certificatelor crl pe tcp/80.
casparjespersen avatar
drapel cn
Îmi pare rău, dar asta nu m-a ajutat cu privire la modul în care pot verifica dacă este posibil. Puteți oferi un link către un ghid?
Martin avatar
drapel kz
GregAskew se referă la un link care este scris direct în interiorul certificatului. (deschideți linkul într-un browser și faceți clic pe „vezi certificatul”) Cred că este acest link ```http://crl.sca1b.amazontrust.com/sca1b-1.crl``` - încercați să accesați acest link din interiorul containerului...
casparjespersen avatar
drapel cn
Bine. Privind pe sistemul de operare Windows, văd că certificatul CRL Endpoint este http://gateway.zscaler.net/zscaler-zscrl--4.crl -- și pot să recuperez acest lucru folosind CURL în WSL.
Martin avatar
drapel kz
Este posibil să aveți un gateway/firewall între containerul docker și internet care interceptează conexiunile SSL? Acest CRL pe care l-ați postat acolo nu pare să provină din certificatul original...
casparjespersen avatar
drapel cn
Acest lucru este cu siguranță foarte posibil. Departamentul nostru IT controlează acest lucru de la distanță.
Martin avatar
drapel kz
Vă rugăm să executați următoarele și să enumerați lanțul de încredere în răspunsul dvs., vă rugăm: ```echo "" | openssl s_client -connect apt.releases.hashicorp.com:443 -servername apt.releases.hashicorp.com:443 | openssl x509 -text -noout```.
casparjespersen avatar
drapel cn
Să ne [continuăm această discuție în chat](https://chat.stackexchange.com/rooms/136157/discussion-between-casparjespersen-and-martin).
Puncte:2
drapel kz

În sfârșit ne-am dat seama. Problema aici a fost că departamentul IT a instalat un firewall care interceptează conexiunile SSL (multe firewall-uri fac acest lucru pentru a putea bloca traficul „prost” care ar trece nedetectat din cauza criptării).

Pentru a putea intercepta o conexiune SSL, firewall-ul își pune propriul certificat pe link și acționează ca un proxy. De aici vine problema: containerul docker nu are încredere în CA folosit de firewall și, prin urmare, respinge stabilirea conexiunii.Evident, pentru mașina dvs. Windows, CA a fost deja adăugată la magazinul de încredere - acest lucru trebuie făcut și pentru containerul dvs. docker - sau trebuie să adăugați --nesigur comutați la comanda curl pentru a ignora acele erori de certificate.

Rețineți că curl aruncă corect o eroare, deoarece https - mecanismul de certificat a fost inventat pentru a putea detecta un atac "Man in the Middle" - și exact asta se întâmplă aici. (Voi sări peste părerea mea aici despre firewall-urile care încalcă securitatea SSL pentru a putea inspecta conținutul pachetului...)

Pentru a remedia acest lucru, aveți nevoie de fișierul CA de la gateway-ul dvs. care „semnează” toate acele certificate și adăugați acest CA la lista de încredere.

Doar pentru a fi complet, acesta este certificatul pe care îl vedeți:

Certificat:
    Date:
        Versiune: 3 (0x2)
        Număr de serie:
            6a:7b:6c:fd:70:b2:68:1a:56:e3:11:3c:43:ed:ae:29
        Algoritm de semnătură: sha1WithRSAEncryption
        Emitent: C = SUA, ST = California, L = Sunnyvale, O = Certificat de server incorect [certificat de server nevalid], CN = Certificat de server incorect
        Valabilitate
            Nu înainte de: 26 ianuarie 07:08:23 2011 GMT
            Nu după: 11 noiembrie 07:08:23 2284 GMT
        Subiect: CN = apt.releases.hashicorp.com
[a tăia]

acesta este originalul:

Certificat:
    Date:
        Versiune: 3 (0x2)
        Număr de serie:
            03:57:ef:0e:70:b2:68:1a:56:e3:11:3c:43:ed:ae:29
        Algoritm de semnătură: sha256WithRSAEncryption
        Emitent: C = SUA, O = Amazon, OU = Server CA 1B, CN = Amazon
        Valabilitate
            Nu înainte de: 27 aprilie 00:00:00 2022 GMT
            Nu după: 26 mai 23:59:59 2023 GMT
        Subiect: CN = apt.releases.hashicorp.com
casparjespersen avatar
drapel cn
Mulțumesc. Nu este fezabil/posibil pentru mine să adaug un flag --insecure la comanda curl. Așa că sunt interesat de corectarea corectă. Am fost la magazinul de certificate pe Windows și am exportat fișierul CER din certificatul Zscaler Root CA, iar acum funcționează când fac `curl --cacert ca.cer -fsSL https://apt.releases.hashicorp.com/gpg` Ura! În sfârșit, care este modalitatea corectă de a adăuga acest certificat „la nivel global”, așa că nu trebuie să-l specific de fiecare dată?
casparjespersen avatar
drapel cn
Nevermind - găsit pe: https://ubuntu.com/server/docs/security-trust-store. Multumesc mult!
Martin avatar
drapel kz
Ma bucur ca am putut sa ajut!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.