Puncte:0

curl: (60) verificarea certificatului serverului a eșuat CRLfile: niciunul

drapel cn

Trec încet de la un rol exclusiv de dezvoltator la un rol hibrid DevOps la compania mea. Ceea ce înseamnă că sunt nou în multe din asta, te rog să mă ușurezi... :-p

Serverul clientului meu rulează Ubuntu 16.04, cu PHP 5.6.4 și există o funcție în portalul administrativ al site-ului lor care rulează un răsuci comanda (în esență) înapoi la sine pentru un fel de sincronizare a fișierelor. Și eșuează de ceva timp (câteva săptămâni/luni). Problema (I gândi) este că verificarea certificatului eșuează și, astfel, funcția moare pe viță de vie.

Când intru ssh pe server, mă pot curba cu ușurință oriunde fără probleme (Google, example.org etc...). Dar încercând doar să curl de bază la adresa URL principală a site-ului borks.

$ curl -v https://www.[numele-site-ul meu].com

* Se încearcă [my-site-IP]...
* Conectat la [my-site-name] ([my-site-IP]) portul 443 (#0)
* au găsit 258 de certificate în /etc/ssl/certs/ca-certificates.crt
* au găsit 908 certificate în /etc/ssl/certs/
* ALPN, oferind http/1.1
* Conexiune SSL folosind TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256
* Verificarea certificatului de server a eșuat. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: niciunul
* Închiderea conexiunii 0
curl: (60) verificarea certificatului de server a eșuat. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: niciunul
Mai multe detalii aici: http://curl.haxx.se/docs/sslcerts.html

curl efectuează verificarea certificatului SSL în mod implicit, folosind un „pachet”
 a cheilor publice ale autorității de certificare (CA). Dacă implicit
 fișierul pachet nu este adecvat, puteți specifica un fișier alternativ
 folosind opțiunea --cacert.
Dacă acest server HTTPS utilizează un certificat semnat de o CA reprezentată în
 pachetul, verificarea certificatului a eșuat probabil din cauza a
 problemă cu certificatul (ar putea fi expirat sau numele poate
 nu se potrivește cu numele domeniului din URL).
Dacă doriți să dezactivați verificarea certificatului de către curl, utilizați
 opțiunea -k (sau --nesigur).

Știu că pot alerga cu curl -k ca să fie nesigur, dar ezit să o fac. Bănuiesc că prima întrebare este, nu ar trebui să-mi fac griji că rulează acest lucru cu steag nesigur, deoarece din punct de vedere tehnic nu părăsește serverul deloc? Am testat exact aceeași comandă curl pe una dintre casetele noastre mai noi care rulează Ubuntu 18.x și, de asemenea, pe un DigitalOcean care rulează v20, fără probleme -- atât buclele externe, cât și cele interne au funcționat grozav.

Pot chiar să fiu pe un alt server și să mă întorc la singurul meu care întâmpină probleme și funcționează bine.

Am încercat tot ce mi-am putut gândi (ceea ce, desigur, nu este mult) și nimic nu pare să funcționeze.

  • rulați actualizări pentru pachetele curl și certbot
  • forțând pe update-ca-certificate
  • adăugat /etc/ssl/certs/cacert.pem atât la curl.cainfo și openssl.cafile vars în php.ini

Știu că probabil că acest lucru nu contează, dar doar pentru a fi complet, am rulat site-ul și prin diverse servicii de verificare online:

Toate au revenit cu rezultate pozitive. Singurul negativ (presupun) este că SSLLabs ne-a calificat cu un „B”, deoarece se pare că TLS 1.0 este încă activat.


Orice ajutor ar fi foarte apreciat. Simt că citirea documentelor menționate în avertismentul de eșec nu este chiar atât de utilă.

Sugestii / sfaturi / trucuri ??

1.000 de mulțumiri anticipate!

drapel in
Actualizați serverul. Ubuntu 16.04 este sfârșitul vieții și openssl și orice altceva legat de criptare este atât de vechi încât pur și simplu nu mai poate fi utilizat. Actualizați serverul la o versiune acceptată.
drapel cn
@GeraldSchneider Mulțumesc și sunt de acord!! Este exact ceea ce i-am propus primului nostru în scrum azi dimineață. Dar... nu este (din păcate) în cărți acum. Pentru a înrăutăți lucrurile... se mută la Pantheon hosting în... august (?!?), dar pe termen scurt trebuie să se rezolve acest lucru pe caseta actuală.
dave_thompson_085 avatar
drapel jp
Versiunile curl și certbot sunt irelevante. **Încercați să actualizați pachetul „ca-certificates”;** launchpad susține că 20210119~16.04.1 este actual. Rețineți că comanda `update-ca-certificates` nu are nimic de-a face cu actualizarea pachetului, ci mai degrabă efectuarea de înlocuiri de site sau manuale a datelor _din_ pachet. Dacă acest lucru nu ajută, va trebui să comparați certificatul(ele) folosit(e) de server cu depozitul de încredere, ceea ce va necesita învățare și gândire reală.
drapel cn
Mulțumesc @dave_thompson_085. Se pare că am avut deja cea mai recentă versiune a pachetului „ca-certificates”. Și... hah, sunt total de acord cu partea „învățare și gândire reală” a comentariului de mai sus. Venind dintr-un mediu de design, apoi trecând în dezvoltare, iar acum - încet- intru în rolul DevOps/SysAdmin... a fost puțin descurajantă și confuză, cel puțin pentru mine.
dave_thompson_085 avatar
drapel jp
Bine, din ce în ce mai greu. Vezi semi-răspunsul.
Puncte:0
drapel jp

Meta: nu un răspuns, cel puțin nu încă, dar câteva informații și sfaturi.

Bine, cazul ușor nu se aplică. După cum ai întâlnit, răsuci nu oferă informații foarte utile atunci când primește o eroare de verificare de certificare din stiva de bază SSL/TLS, cel puțin atunci când se utilizează GnuTLS așa cum o face versiunea Ubuntu. Cu toate acestea, OpenSSL (care ar trebui să fie prezent pentru că curl îl are ca dependență, deși nu văd de ce) oferă un program de linie de comandă numit simplu openssl acesta este în mare parte un instrument de testare și este mult mai pronunțat, precum și mai tolerant la erori. De exemplu, pe un site intenționat rău, într-o versiune docker a Ubuntu 16.04:

# curl -v https://untrusted-root.badssl.com/
* Se încearcă 104.154.89.105...
* Conectat la untrusted-root.badssl.com (104.154.89.105) portul 443 (#0)
* au găsit 129 de certificate în /etc/ssl/certs/ca-certificates.crt
* au găsit 516 certificate în /etc/ssl/certs
* ALPN, oferind http/1.1
* Conexiune SSL folosind TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256
* Verificarea certificatului de server a eșuat. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: niciunul
* Închiderea conexiunii 0
curl: (60) verificarea certificatului de server a eșuat. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: niciunul
Mai multe detalii aici: http://curl.haxx.se/docs/sslcerts.html

[decupați textul conservat -- la fel ca al dvs.]
# openssl s_client -connect untrusted-root.badssl.com:443 -servername untrusted-root.badssl.com
CONECTAT(00000003)
adâncime=1 C = SUA, ST = California, L = San Francisco, O = BadSSL, CN = BadSSL Autoritate de certificare rădăcină neîncrezătoare
Verificați error:num=19:certificat autosemnat în lanțul de certificate
---
Lanț de certificate
 0 s:/C=US/ST=California/L=San Francisco/O=BadSSL/CN=*.badssl.com
   i:/C=US/ST=California/L=San Francisco/O=BadSSL/CN=BadSSL Autoritate de certificare rădăcină neîncrezătoare
 1 s:/C=US/ST=California/L=San Francisco/O=BadSSL/CN=BadSSL Autoritate de certificare rădăcină neîncrezătoare
   i:/C=US/ST=California/L=San Francisco/O=BadSSL/CN=BadSSL Autoritate de certificare rădăcină neîncrezătoare
---
Certificat de server
-----ÎNCEPE CERTIFICAT-----
MIIEmTCCAoGgAwIBAgIJAMJ1vCpOBAlkMA0GCSqGSIb3DQEBCwUAMIGBMQswCQYD
VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5j
aXNjbzEPMA0GA1UECgwGQmFkU1NMMTQwMgYDVQQDDCtCYWRTU0wgVW50cnVzdGVk
IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTIxMTIwNDAwMDgxOVoXDTIz
MTIwNDAwMDgxOVowYjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWEx
FjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDzANBgNVBAoMBkJhZFNTTDEVMBMGA1UE
AwwMKi5iYWRzc2wuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
wgTs+IzuBMKz2FDVcFjMkxjrXKhoSbAitfmVnrErLHY+bMBLYExM6rK0wA+AtrD5
csmGAvlcQV0TK39xxEu86ZQuUDemZxxhjPZBQsVG0xaHJ5906wqdEVImIXNshEx5
VeTRA+gGPUgVUq2zKNuq/27/YJVKd2s58STRMbbdTcDE/FO5bUKttXz+rvUV0jNI
5yJxx8IUemwo6jdK3+pstXK0flqiFtxpsVdE2woSq97DD0d0XEEi4Zr5G5PmrSIG
KS6xukkcDCeeo/ul90ByAKySCNmMV4RTgQXL5v5rVJhAJ4XHELtzcO9pGEEHRVV8
+WQ/PSzDqXzrkxpMhtHKhQIDAQABozIwMDAJBgNVHRMEAjAAMCMGA1UdEQQcMBqC
DCouYmFkc3NsLmNvbYIKYmFkc3NsLmNvbTANBgkqhkiG9w0BAQsFAAOCAgEADVgB
Ias+fb/Ckdnw5iSYsfRICfhnTBNgvroorUQe09Psx0tAbjlIYqOCtloNhvCbJYa7
tQQOO65s7RKArpAA1qoapWfDti2aHuMNvGwImwX538RiLf4Rm4MEF6vuF6MZMH/u
Ts1iugB3+d7oSWl/K+RvA4NMRNrlxOLelBJwaTsExsQ5QalpPamongnyWXHZ2Sna
dsw9hBku9ZmlRqYOCE/TajsydqCIhCc2QC5xdd3fxXlcfq5h7G0oOuCYvW7BscTk
AQZYkwS+y3mTHF9wSlxJB4iEGC0NovdM5GsVgfvZ5+jtXGuDlsphAIFLxpIJi1bR
+NsAkEthHoQZDNttvtVJPFPp83PdRDmL6IwrbbXvAwZWWgYmS6HpbF5bxR09JIOA
KttGK1wnd6bh2d9Xy6kfoxZ1gz6i2y5OpxbMoi6z8o1Y2hSOv2kgnD2fxtR9X4OO
wrwWZWnhwsiq7pnZbZiA9GFR4tKZVcJ5ny5aul/MZ0wb5MST7wHW/7qhydfBpOy6
hZ5BSbwfmBao+CJ7NxNJb5c03W5+/Vf1uxXZhodpag6Z5p0rru0v7ea9nMk5dNUm
qR+2XGwzDk9n8jCWwfvSKCa77rf2HqKi8ZaQN/NRp7uVqfY++JVI+h3CLyMk8wTL
FifbLPKbSCW7PAFEfM3wh76VQg1CHpHOPVp/wno=
-----CERTIFICAT FINAL-----
subiect=/C=US/ST=California/L=San Francisco/O=BadSSL/CN=*.badssl.com
emitent=/C=US/ST=California/L=San Francisco/O=BadSSL/CN=BadSSL Autoritate de certificare rădăcină neîncrezătoare
---
Nu s-au trimis nume de CA de certificat de client
Rezumat peer signing: SHA512
Cheie Temp Server: ECDH, P-256, 256 biți
---
SSL handshake a citit 3561 de octeți și a scris 425 de octeți
---
Nou, TLSv1/SSLv3, Cipher este ECDHE-RSA-AES128-GCM-SHA256
Cheia publică a serverului este de 2048 biți
Este acceptată renegocierea sigură
Compresie: NIMIC
Extindere: NIMIC
Nu s-a negociat ALPN
Sesiune SSL:
    Protocol: TLSv1.2
    Cifr: ECDHE-RSA-AES128-GCM-SHA256
    ID sesiune: AC5EB655FAEA1C1A320CA930E6A087FBFE020D3D9C451A72DD7CE77A8080AF0D
    ID-ul sesiunii-ctx:
    Cheie principală: 419065F69901D74454A224DD22F9D459FA85E6EB4D6F043C649C8FDFA2E5E1FD9C168AC270087B88511B0939927F9A0A
    Key-Arg: Niciuna
    Identitate PSK: Niciuna
    Sugestie de identitate PSK: Niciuna
    Nume de utilizator SRP: niciunul
    Sugestie pentru durata de viață a biletului de sesiune TLS: 300 (secunde)
    Tichet sesiune TLS:
    0000 - cc 91 34 52 b1 ce c6 7c-8a 97 27 b0 b4 50 d6 9d ..4R...|..'..P..
    0010 - 27 b8 87 13 0b 70 92 e7-23 be 57 5c 00 31 f7 90 '....p..#.W\.1..
    0020 - 65 e3 08 d5 63 14 e9 cd-cc 50 59 3f 2a 98 31 d1 e...c....PY?*.1.
    0030 - ab f8 ca a8 09 aa 66 bf-7c ff b6 66 42 10 8b 6e ......f.|..fB..n
    0040 - c7 e8 7b f3 2b 35 b3 76-8c 95 b3 b5 37 85 09 42 ..{.+5.v....7..B
    0050 - 83 a9 c3 f7 54 f4 c5 f5-b2 0d d5 fa c6 24 a6 e2 ....T........$..
    0060 - fb 03 cf 35 9c 0d cc 48-e0 bc fc 43 11 3c 19 51 ...5...H...C.<.Q
    0070 - 0a 23 7d b2 6c ff 9b e2-bc 64 1d 74 34 cb 13 7b .#}.l....d.t4..{
    0080 - c8 55 47 95 71 9d 94 00-33 a0 a0 87 d4 4a fb 81 .UG.q...3....J...
    0090 - 34 36 28 2e ac ​​d7 22 36-36 5f 9c cb 3f 0d e7 00 46(..."66_...?...
    00a0 - e2 b7 d0 35 48 81 2f c7-9d a1 8a f6 52 a3 11 17 ...5H./.....R...
    00b0 - 67 89 94 d3 66 2b 5c c4-73 c5 72 1e 84 46 57 a5 g...f+\.s.r..FW.
    00c0 - 77 05 bc 49 a3 1a fe e6-da a8 0f 40 e2 17 f0 40 w..I.......@...@

    Ora de începere: 1644060097
    Timeout: 300 (sec)
    Verificați codul de returnare: 19 (certificat autosemnat în lanțul de certificate)
---
Q
TERMINAT

Observați că prima ieșire după CONECTAT linia: depth=1 ... / verificare eroare:num=19:.... indică faptul că verificarea certificatului a eșuat; in orice caz openssl ignoră această eroare și finalizează strângerea de mână, rezultând ultima secțiune a rezultatelor: Sesiune SSL: / Protocol: (valid) / Cifrare: (valid) / ... / Verificați codul de returnare:... după care trebuie să tastați Q și reveniți sau control-D (singur) pentru a ieși din program sau control-C pentru a ucide, cu excepția cazului în care adăugați </dev/null pe linia de comandă care are același efect ca și tastarea automată control-D. Deocamdată nu trebuie să înțelegeți valorile specifice ale Protocolului și Cifrului, doar că NU sunt ceva de genul „niciun” sau „eroare” sau „lipsă”. Dar fiți avertizat că textul mesajului OpenSSL pentru verify=19 este incomplet până la punctul de a fi confuz; este perfect normal, în general, ca lanțul de certificate de la un server SSL/TLS să includă certificatul rădăcină care este autosemnat și dacă acea rădăcină se află în magazinul de încredere local OpenSSL acceptă (și curl/GnuTLS cu siguranță ar trebui) un astfel de lanț. Numai dacă rădăcina este în lanț ȘI NU este de încredere local, obțineți acest cod de verificare. Alte coduri de verificare, cum ar fi „expirat”, au în mare parte mesaje mai clare.

De asemenea, rețineți că am folosit -numele serverului cu numele gazdei; aceasta invocă SNI=ServerNameIndication care astăzi multe servere SSL/TLS, inclusiv badssl.com, nevoie pentru a transmite certificatul(ele) corect(e). Cu toate acestea, versiunea curl din Ubuntu16.04 NU trimite SNI; fără cercetare, nu știu dacă acest lucru se datorează versiunii puțin (dar nu foarte) mai vechi de curl, utilizării lui GnuTLS sau doar unei greșeli în construcție. Dar oricum ca o încercare de probă cel openssl s_client comanda împotriva serverului dvs. atât cu cât și fără -servername host parte și salvați rezultatul (cu redirecționare sau tee, de preferință incluzând stderr cu &> sau |& tee sau echivalent) deoarece este posibil să avem nevoie de ele. Dacă versiunea cu SNI funcționează și versiunea fără SNI primește o eroare de verificare, aceasta este problema ta -- lipsa SNI. (Poate fi dificil de reparat, dar cel puțin știi ce este.)

În caz contrar, uitați-vă la ieșirea pentru fără SNI. Dacă OpenSSL raportează o eroare de verificare (de acord cu curl/GnuTLS), uitați-vă la mesajul aferent -- ar trebui să indice cel puțin în direcția problemei, dacă nu chiar spre ea. Dacă OpenSSL nu raportează nicio eroare de verificare (unde o face curl/GnuTLS, ambele folosind același truststore furnizat de sistem în /etc/ssl) va fi mai complicat, așa că voi lăsa asta pentru moment și voi adăuga mai târziu, dacă este necesar.

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.