curl: (60) Probleem met SSL-certificaat: kan certificaat van lokale uitgever niet ophalen

Met betrekking tot de fout ‘SSL-certificaat: kan certificaat van lokale uitgever niet ophalen’. Het is belangrijk op te merken dat dit van toepassing is op het systeem dat het CURL-verzoek verzendt, en NIET op de server die het verzoek ontvangt.

  1. Download de nieuwste cacert.pem van https://curl.haxx.se/ ca/cacert.pem

  2. Voeg de volgende regel toe aan php.ini: (als dit shared hosting is en je hebt geen toegang tot php.ini, dan zou je dit kunnen toevoegen aan .user.ini in public_html).

    curl.cainfo="/path/to/downloaded/cacert.pem"

    Zorg ervoor dat u het pad tussen dubbele aanhalingstekens plaatst!!!

  3. Standaard parseert het FastCGI-proces elke 300 seconden nieuwe bestanden (indien nodig kunt u de frequentie wijzigen door een aantal bestanden toe te voegen, zoals hier wordt voorgesteld https://ss88.uk/blog/fast-cgi-and-user-ini-files-the- new-htaccess/).


Antwoord 1, autoriteit 100%

Het mislukt omdat cURL het door de server geleverde certificaat niet kan verifiëren.

Er zijn twee opties om dit te laten werken:

  1. Gebruik cURL met de optie -kwaarmee curl onveilige verbindingen kan maken, dat wil zeggen dat cURL het certificaat niet verifieert.

  2. Voeg de root-CA (de CA die het servercertificaat ondertekent) toe aan /etc/ssl/certs/ca-certificates.crt

U moet optie 2 gebruiken, omdat dit de optie is die ervoor zorgt dat u verbinding maakt met een beveiligde FTP-server.


Antwoord 2, autoriteit 37%

Ik heb dit probleem opgelost door een regelcode toe te voegen aan het cURL-script:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Waarschuwing: dit maakt het verzoek absoluut onveilig (zie antwoord van @YSU)!


Antwoord 3, autoriteit 11%

In mijn geval bleek het een probleem te zijn met de installatie van mijn certificaat op de service die ik probeerde te gebruiken met cURL. Ik heb de tussen- en hoofdcertificaten niet gebundeld/aaneengeschakeld in mijn domeincertificaat. In het begin was het niet duidelijk dat dit het probleem was, omdat Chrome het had opgelost en het certificaat accepteerde ondanks het weglaten van de tussen- en rootcertificaten.

Na het bundelen van het certificaat werkte alles zoals verwacht. Ik heb zo gebundeld

$ cat intermediate.crt >> domain.crt

En herhaald voor alle intermediate en het root-certificaat.


Antwoord 4, autoriteit 11%

Voor mij hielp een eenvoudige installatie van certificaten:

sudo apt-get install ca-certificates

Antwoord 5, autoriteit 9%

Heb dit probleem gehad na installatie van Git Extensions v3.48. Probeerde mysysgit opnieuw te installeren, maar hetzelfde probleem. Op het einde moest ik Git SSL-verificatie uitschakelen (houd rekening met beveiligingsimplicaties!) met:

git config --global http.sslVerify false

maar als je een domeincertificaat hebt, kun je het beter toevoegen aan (Win7)

C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt

Antwoord 6, autoriteit 6%

We zijn onlangs tegen deze fout aangelopen. Het bleek te maken te hebben met het feit dat het rootcertificaat niet correct in de CA-winkelmap was geïnstalleerd. Ik gebruikte een curl-opdracht waarbij ik de CA-directory direct specificeerde. curl --cacert /etc/test/server.pem --capath /etc/test ...Dit commando mislukte elke keer met curl: (60) SSL-certificaatprobleem: kan niet ontvang een certificaat van een lokale uitgever.

Na het gebruik van strace curl ..., werd vastgesteld dat curl op zoek was naar het rootcertificaatbestand met de naam 60ff2731.0, die is gebaseerd op een openssl-hash-naamgevingsconvetie. Dus ik vond dit commando om het rootcertificaat effectief correct te importeren:

ln -s rootcert.pem `openssl x509 -hash -noout -in rootcert.pem`.0

die een softlink maakt

60ff2731.0 -> rootcert.pem

curl, lees onder de dekens het server.pem cert, bepaalde de naam van het root cert-bestand (rootcert.pem), converteerde het naar zijn hash-naam, deed toen een OS-bestand opzoeken, maar kon het niet vinden.

Dus de afhaalmogelijkheid is, gebruik strace bij het uitvoeren van curl wanneer de curl-fout onduidelijk is (was een enorme hulp), en zorg er vervolgens voor dat u het rootcertificaat correct installeert met behulp van de openssl-naamgevingsconventie.


Antwoord 7, autoriteit 5%

Het is hoogstwaarschijnlijk een ontbrekend certificaat van de server.

Root->Intermediate->Server

Een server moet de Server & Minimaal gemiddeld.

Gebruik openssl s_client -showcerts -starttls ftp -crlf -connect abc:21om het probleem op te lossen.

Als er slechts één certificaat wordt geretourneerd (zelfondertekend of uitgegeven), moet u een van de volgende opties kiezen:

  1. de server laten repareren
  2. vertrouw dat certificaat en voeg het toe aan uw CA-certificaatarchief (niet het beste idee)
  3. vertrouwen uitschakelen, bijv. curl -k(heel slecht idee)

Als de server heeft geretourneerd, meer dan één, maar niet inclusief een zelfondertekend (root) certificaat:

  1. installeer het CA (root)-certificaat in uw CA-winkel voor deze keten, b.v. google de uitgever. (ALLEENals je die CA vertrouwt)
  2. de server laten repareren om de CA te verzenden als onderdeel van de keten
  3. vertrouw een certificaat in de keten
  4. vertrouwen uitschakelen

Als de server een root-CA-certificaat heeft geretourneerd, staat het niet in uw CA-archief, uw opties zijn:

  1. Toevoegen (vertrouwen)
  2. vertrouwen uitschakelen

Ik heb verlopen/ingetrokken certificaten genegeerd omdat er geen berichten waren die dit aangaven. Maar u kunt de certificaten bekijken met openssl x509 -text

Aangezien u verbinding maakt met een thuisversie (https://www. cerberusftp.com/support/help/installing-a-certificate/) ftp-server, ik ga zeggen dat het zelfondertekend is.

Plaats meer details, zoals de uitvoer van openssl.


Antwoord 8, autoriteit 4%

Volgens cURL-documentenkunt u het certificaat ook doorgeven aan de curlcommando:

Verkrijg een CA-certificaat dat de externe server kan verifiëren en gebruik de
juiste optie om op dit CA-certificaat te wijzen voor verificatie wanneer:
Verbinden. Voor libcurlhackers: curl_easy_setopt(curl,
CURLOPT_CAPATH, capath);

Met de curl-opdrachtregeltool: --cacert [file]


Bijvoorbeeld:

curl --cacert mycertificate.cer -v https://www.stackoverflow.com

Antwoord 9, autoriteit 3%

Ik ben dit probleem ook tegengekomen. Ik heb dit draadje gelezen en de meeste antwoorden zijn informatief, maar te ingewikkeld voor mij. Ik heb geen ervaring met netwerkonderwerpen, dus dit antwoord is bedoeld voor mensen zoals ik.

In mijn geval deed deze fout zich voor omdat ik de tussen- en rootcertificaten niet heb opgenomen naast het certificaat dat ik in mijn toepassing gebruikte.

Dit is wat ik heb gekregen van de leverancier van het SSL-certificaat:

- abc.crt
- abc.pem
- abc-bunde.crt

In het bestand abc.crtstond slechts één certificaat:

-----BEGIN CERTIFICATE-----
/*certificate content here*/
-----END CERTIFICATE-----

Als ik het in dit formaat zou aanleveren, zou de browser geen fouten tonen (Firefox) maar ik zou een curl: (60) SSL certificate : unable to get local issuer certificateniet krijgen toen ik dat deed het krulverzoek.

Controleer uw abc-bunde.crt-bestand om deze fout op te lossen. Je zult waarschijnlijk zoiets als dit zien:

-----BEGIN CERTIFICATE-----
/*additional certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*other certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*different certificate content here*/
-----END CERTIFICATE-----

Dit zijn uw tussen- en basiscertificaten. Er treedt een fout op omdat ze ontbreken in het SSL-certificaat dat u aan uw applicatie levert.

Om de fout op te lossen, combineert u de inhoud van beide bestanden in dit formaat:

-----BEGIN CERTIFICATE-----
/*certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*additional certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*other certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*different certificate content here*/
-----END CERTIFICATE-----

Houd er rekening mee dat er geen spaties zijn tussen certificaten, aan het einde of aan het begin van het bestand. Zodra u dit gecombineerde certificaat bij uw aanvraag heeft ingediend, zou uw probleem opgelost moeten zijn.


Antwoord 10, autoriteit 2%

Misschien is het voldoende om de lijst met certificaten bij te werken

sudo update-ca-certificates -f

update-ca-certificates is een programma dat de directory /etc/ssl/certs bijwerkt om SSL-certificaten te bevatten en ca-certificates.crt genereert, een aaneengeschakelde lijst met certificaten uit één bestand.


Antwoord 11, autoriteit 2%

Probeer curl opnieuw te installeren in Ubuntu en werk mijn CA-certificaten bij met sudo update-ca-certificates --freshwaarmee de certificaten zijn bijgewerkt


Antwoord 12, autoriteit 2%

  1. Download https://curl.haxx.se/ca/cacert.pem

  2. Verplaats dit bestand na het downloaden naar uw wamp-server.

    Voor exp: D:\wamp\bin\php\

  3. Voeg vervolgens de volgende regel toe aan het php.ini-bestand onderaan.

curl.cainfo=”D:\wamp\bin\php\cacert.pem”

  1. Nu herstartuw wamp-server.

Antwoord 13, autoriteit 2%

Voer deze twee codes in om het probleem met het SSL-certificaat uit te schakelen. het heeft voor mij gewerkt
na veel onderzoek vond ik dit.

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);


Antwoord 14

Ja, u moet ook een CA-certificaat toevoegen. Een codefragment toevoegen in Node.js voor een duidelijk overzicht.

var fs = require(fs)
var path = require('path')
var https = require('https')
var port = process.env.PORT || 8080;
var app = express();
https.createServer({
key: fs.readFileSync(path.join(__dirname, './path to your private key/privkey.pem')),
cert: fs.readFileSync(path.join(__dirname, './path to your certificate/cert.pem')),
ca: fs.readFileSync(path.join(__dirname, './path to your CA file/chain.pem'))}, app).listen(port)

Antwoord 15

In Windows had ik dit probleem. Curl is geïnstalleerd door mysysgit, dus het downloaden en installeren van de nieuwste versie loste mijn probleem op.

Anders zijn deze fatsoenlijke instructiesvoor het bijwerken van uw CA-certificaat die u kunt proberen.


Antwoord 16

Mijn geval was anders. Ik host een site achter een firewall. De fout is veroorzaakt door pfSense.

Network layout: |Web Server 10.x.x.x| <-> |pfSense 49.x.x.x| <-> |Open Internet|

Ik heb per ongeluk de oorzaak gevonden, dankzij dit antwoord.


Alles is in orde toen ik toegang kreeg tot mijn sitevia WAN.

Als de site echter werd benaderd vanuit het LAN (bijv. toen WordPress een curl-verzoek deed naar zijn eigen server, ondanks het gebruik van de WAN IP 49.x.x.x), het werd geserveerd op de pfSense-inlogpagina.

Ik heb het certificaat geïdentificeerd als pfSense webConfigurator Self-Signed Certificate. Geen wonder dat curleen fout veroorzaakte.

Oorzaak:Wat er gebeurde was dat curlhet WAN IP-adres van de site 49.x.x.xgebruikte. Maar in de context van de webserver was het WAN IP de firewall.

Debug:ik ontdekte dat ik het pfSense-certificaat kreeg.

Oplossing:verwijs op de server die de site host zijn eigen domeinnaam naar 127.0.0.1

Door de oplossing toe te passen, werd het verzoek van curlcorrect afgehandeld door de webserver en niet doorgestuurd naar de firewall die reageerde door de inlogpagina te verzenden.


Antwoord 17

U moet het servercertificaat wijzigen van cert.pemin fullchain.pem
Ik had hetzelfde probleem met Perl HTTPS Daemon:
Ik ben veranderd:
SSL_cert_file => '/etc/letsencrypt/live/mydomain/cert.pem'
naar:
SSL_cert_file => '/etc/letsencrypt/live/mydomain/fullchain.pem'


Antwoord 18

sudo apt-get install ca-certificates

Werkte voor mij.


Antwoord 19

Op Windows – als je wilt uitvoeren vanaf cmd

> curl -X GET "https://some.place"

Cacert.pem downloaden van
https://curl.haxx.se/docs/caextract.html

Stel de omgevingsvariabele permanent in:

CURL_CA_BUNDLE = C:\somefolder\cacert.pem

En laad de omgeving opnieuw door een willekeurig cmd-venster waarin u dat wilt, opnieuw te openen
gebruik krul; als Chocolatey is geïnstalleerd, kunt u het volgende gebruiken:

refreshenv

Probeer het nu opnieuw

Reden voor het probleem:
https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate/replies/95548


Antwoord 20

had dat probleem en het was niet opgelost met nieuwere versie. / etc / Certs had de root-cert, de browser zei dat alles in orde is. Na wat testen kreeg ik van Ssllabs.com de waarschuwing, dat mijn ketting niet compleet was (inderdaad was het de ketting voor het oude certificaat en niet de nieuwe). Na het corrigeren van de cert-keten was alles goed, zelfs met krullen.


Antwoord 21

Dit is SSH Certificate Store-probleem. U moet het geldige Certificate PEM-bestand downloaden van DOEL CA-website en vervolgens het soft-link-bestand bouwen om SSL het vertrouwde certificaat te instrueren.

openssl x509 -hash -noout -in DigiCert_Global_Root_G3.pem

U krijgt dd8e9d41

Bouw Solf-koppeling met hash-nummer en suffix het bestand met een .0 (dot-nul)

dd8e9d41.0

Probeer dan opnieuw.


Antwoord 22

Ik was van plan om te reageren op yuvik’s antwoord , maar ik mis genoeg reputatiepunten.

Wanneer u een .crt-bestand importeert naar /usr/share/local/ca-certificates, moet het in het juiste formaat zijn. Sommige hiervan zijn eerder genoemd, maar niemand heeft de behoefte genoemd voor slechts een nieuw lijnkarakter, en niemand heeft een checklist verzameld, dus ik dacht dat ik er een zou bieden terwijl ik erbij ben.

  1. Het certificaat moet eindigen in .crt. Van ubuntu’s man pagina :

    Certificaten moeten een .crt-extensie hebben om door te worden opgenomen door
    Update-CA-certificaten

  2. Certificaatbestanden in /usr/local/share/ca-certificateskunnen alleen één certificaat bevatten

  3. Certificaatbestanden moeten eindigen op een nieuwe regel. update-ca-certificateslijkt te werken als elke rij bijvoorbeeld een regelterugloop + een nieuwe regel bevat (zoals standaard in Windows), maar zodra het certificaat is toegevoegd aan /etc/ssl/ca-certificates.crt, het zal nog steeds niet werken. Deze specifieke vereiste heeft me gebeten omdat we certificaten van een externe bron laden.


Antwoord 23

Tot nu toe heb ik dit probleem binnen bedrijfsnetwerken zien optreden om twee redenen, waarvan er één of beide in uw geval kunnen optreden:

  1. Vanwege de manier waarop netwerkproxy’swerken, hebben ze hun eigen SSL-certificaten, waardoor de certificaten die curl ziet veranderen. Veel of de meeste bedrijfsnetwerken dwingen u deze proxy’s te gebruiken.
  2. Sommige antivirusprogramma’sdie op client-pc’s worden uitgevoerd, werken ook op dezelfde manier als een HTTPS-proxy, zodat ze uw netwerkverkeer kunnen scannen. Uw antivirusprogramma heeft mogelijk een optie om deze functie uit te schakelen (ervan uitgaande dat uw beheerders dit toestaan).

Als een kanttekening: nr. 2 hierboven kan u een ongemakkelijk gevoel geven over het scannen van uw zogenaamd veilige TLS-verkeer. Dat is de zakelijke wereld voor jou.


Antwoord 24

Specifiekvoor Windows-gebruikers, die curl-7.57.0-win64-mingwof een vergelijkbare versie gebruiken.

Dit is een beetje laat en de bestaande antwoorden zijn correct. Maar ik moest nog steeds een beetje worstelen om het op mijn Windows-machine te laten werken, hoewel het proces eigenlijk vrij eenvoudig is. Dus, het stapsgewijze proces delen.

Deze fout betekent in feite dat curl het certificaat van de doel-URI niet kan verifiëren. Als u de uitgever van het certificaat (CA) vertrouwt, kunt u dat toevoegen aan de lijst met vertrouwde certificaten.

Blader daarvoor door de URI (bijvoorbeeld in Chrome) en volg de stappen

  1. Klik met de rechtermuisknop op het veilige hangslotpictogram
  2. Klik op certificaat, er wordt een venster geopend met de certificaatdetails
  3. Ga naar het tabblad ‘Certificatiepad’
  4. Klik op het ROOT-certificaat
  5. Klik op Certificaat bekijken, er wordt een ander certificaatvenster geopend
  6. Ga naar het tabblad Details
  7. Klik op Kopiëren naar bestand, de exportwizard wordt geopend
  8. Klik op Volgende
  9. Selecteer ‘Base-64 gecodeerde X.509 (.CER)’
  10. Klik op Volgende
  11. Geef een vriendelijke naam, bijv. ‘MyDomainX.cer’ (blader naar de gewenste directory)
  12. Klik op Volgende
  13. Klik op Voltooien, het certificaatbestand wordt opgeslagen
  14. Open nu dit .cer-bestand en kopieer de inhoud (inclusief —–BEGIN CERTIFICATE—– en —–END CERTIFICATE—–)
  15. Ga nu naar de map waar curl.exeis opgeslagen, b.v. C:\SomeFolder\curl-7.57.0-win64-mingw\bin
  16. Open het bestand curl-ca-bundle.crtmet een teksteditor
  17. Voeg de gekopieerde certificaattekst toe aan het einde van het bestand. Opslaan

Nu zou je commando prima in curl moeten worden uitgevoerd.


Antwoord 25

Ik had dit probleem met Digicert van alle CA’s. Ik heb een digicertca.pem-bestand gemaakt dat zowel intermediate als root in één bestand is geplakt.

curl https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem
curl https://cacerts.digicert.com/DigiCertSHA2SecureServerCA.crt.pem
curl -v https://mydigisite.com/sign_on --cacert DigiCertCA.pem
...
*  subjectAltName: host "mydigisite.com" matched cert's "mydigisite.com"
*  issuer: C=US; O=DigiCert Inc; CN=DigiCert SHA2 Secure Server CA
*  SSL certificate verify ok.
> GET /users/sign_in HTTP/1.1
> Host: mydigisite.com
> User-Agent: curl/7.65.1
> Accept: */*
...

Eorekan had het antwoord, maar kreeg alleen mezelf en een ander zover om zijn antwoord te stemmen.


Antwoord 26

dit kan je helpen voor guzzle:

$client = new Client(env('API_HOST'));
$client->setSslVerification(false);

getest op guzzle/guzzle 3.*


Antwoord 27

Eenvoudige oplossing:
IN ~/.sdkman/etc/config, verander sdkman_insecure_ssl=true

Stappen:
nano ~/.sdkman/etc/config
verander sdkman_insecure_ssl=falsein sdkman_insecure_ssl=true
opslaan en afsluiten

Other episodes