Come faccio a gestire i certificati utilizzando cURL mentre provo ad accedere a un URL HTTPS?

Sto ottenendo il seguente errore usando curl:

 curl: (77) errore nell'impostazione dei percorsi di verifica del certificato: CAfile: /etc/ssl/certs/ca-certificates.crt CApath: none 

Come posso impostare questo luogo di verifica del certificato? Grazie.

Questo errore è correlato a un pacchetto mancante : ca-certificates . Installalo.

In Ubuntu Linux (e distribuzione simile):

 # apt-get install ca-certificates 

In CygWin tramite Apt-Cyg

 # apt-cyg install ca-certificates 

In Arch Linux (Raspberry Pi)

 # pacman -S ca-certificates 

La documentazione dice:

Questo pacchetto include file PEM di certificati CA per consentire alle applicazioni basate su SSL di verificare l’autenticità delle connessioni SSL.

Come visto su: Debian – Dettagli dei certificati ca del pacchetto in squeeze

Ho anche installato la versione più recente di ca-certificates, ma continuava a ricevere l’errore:

 curl: (77) error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none 

Il problema era che il riccio si aspettava che il certificato si /etc/pki/tls/certs/ca-bundle.crt sul percorso /etc/pki/tls/certs/ca-bundle.crt ma non lo trovasse perché si trovava sul percorso /etc/ssl/certs/ca-certificates.crt .

Copiando il mio certificato sulla destinazione prevista eseguendo

 sudo cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt 

ha funzionato per me Sarà necessario creare cartelle per la destinazione di destinazione se non esistono eseguendo

 sudo mkdir -p /etc/pki/tls/certs 

Se necessario, modificare il comando precedente per fare in modo che il nome del file di destinazione corrisponda al percorso previsto da curl, ovvero sostituire /etc/pki/tls/certs/ca-bundle.crt con il percorso che segue “CAfile:” nel messaggio di errore.

Metti questo nel tuo .bashrc

 # fix CURL certificates path export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt 

(vedi commento di Robert)

Crea un file ~/.curlrc con il seguente contenuto

 cacert=/etc/ssl/certs/ca-certificates.crt 

Il modo più rapido per aggirare l’errore è aggiungere l’opzione -k da qualche parte nella richiesta di ricciolo. Quell’opzione “consente connessioni a citare SSL senza certificati”. (da curl –help)

Tieni presente che ciò potrebbe significare che non stai parlando con l’endpoint che pensi di essere, poiché presenta un certificato non firmato da una CA di cui ti fidi.

Per esempio:

 $ curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg 

mi ha dato la seguente risposta all’errore:

 curl: (77) error setting certificate verify locations: CAfile: /usr/ssl/certs/ca-bundle.crt CApath: none 

Ho aggiunto in -k:

 curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg -k 

e nessun messaggio di errore. Come bonus, ora ho apt-cyg installato. E certificati CA.

@roens è corretto. Questo riguarda tutti gli utenti di Anaconda , con errore di sotto
curl: (77) error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none

La soluzione alternativa consiste nell’utilizzare il ricciolo di sistema predefinito ed evitare di fare confusione con la variabile PATH Anaconda anteposta. Puoi o

  1. Rinominare l’anaconda curl binario 🙂
    mv /path/to/anaconda/bin/curl /path/to/anaconda/bin/curl_anaconda

  2. O rimuovere l’arricciatura Anaconda
    conda remove curl

$ which curl /usr/bin/curl

[0] Anaconda Ubuntu curl Github problema https://github.com/conda/conda-recipes/issues/352

Da $ man curl :

 --cert-type  (SSL) Tells curl what certificate type the provided certificate is in. PEM, DER and ENG are recognized types. If not specified, PEM is assumed. If this option is used several times, the last one will be used. --cacert  (SSL) Tells curl to use the specified certificate file to verify the peer. The file may contain multiple CA certificates. The certificate(s) must be in PEM format. Normally curl is built to use a default file for this, so this option is typically used to alter that default file. 

Un’altra alternativa per risolvere questo problema è disabilitare la convalida del certificato:

 echo insecure >> ~/.curlrc 

Per il codice PHP in esecuzione su XAMPP su Windows ho scoperto che avevo bisogno di modificare php.ini per includere il sotto

 [curl] ; A default value for the CURLOPT_CAINFO option. This is required to be an ; absolute path. curl.cainfo = curl-ca-bundle.crt 

e quindi copiare su un file https://curl.haxx.se/ca/cacert.pem e rinominare in curl-ca-bundle.crt e posizionarlo sotto il percorso \ xampp (non ho potuto ottenere che curl.capath funzionasse) . Ho anche trovato che CAbundle sul sito cURL non era abbastanza per il sito remoto a cui mi stavo connettendo, quindi ne ho usato uno che è elencato con una versione precaricata di Windows di curl 7.47.1 su http://winampplugins.co.uk /arricciare/

Sembra che il tuo ricciolo punti a un file non esistente con certificati CA o simili.

Per il riferimento principale sui certificati CA con arricciatura, consultare: https://curl.haxx.se/docs/sslcerts.html

Questo ha funzionato per me

 sudo apt-get install ca-certificates 

quindi vai nella cartella dei certificati a

 sudo cd /etc/ssl/certs 

quindi copi il file ca-certificates.crt in /etc/pki/tls/certs

 sudo cp ca-certificates.crt /etc/pki/tls/certs 

se non esiste una cartella tls / certs: creane una e modifica i permessi usando chmod 777 -R folderNAME

arricciatura esegue la verifica del certificato SSL per impostazione predefinita, utilizzando un “pacchetto” di chiavi pubbliche Certificate Authority (CA) CA). Il pacchetto predefinito è denominato curl-ca-bundle.crt; puoi specificare un file alternativo usando l’opzione –cacert.

Se questo server HTTPS utilizza un certificato firmato da una CA rappresentata nel pacchetto, la verifica del certificato probabilmente non è riuscita a causa di un problema con il certificato (potrebbe essere scaduto o il nome potrebbe non corrispondere al nome di dominio nell’URL).

Se desideri distriggersre la verifica del certificato da parte di curl, usa l’opzione -k (o --insecure ).

per esempio

 curl --insecure http://........ 

Per quello che vale, controlla anche which curl viene eseguita.

Un utente su una macchina condivisa che gestisco aveva ricevuto questo errore. Ma la causa si è rivelata perché avevano installato Anaconda ( http://continuum.io ). In questo modo si mette il percorso binario di Anaconda prima dello $PATH standard, e viene fornito con il proprio binario curl , che ha avuto problemi nel trovare i certificati predefiniti che sono stati installati su questa macchina Ubuntu.

Ho avuto lo stesso identico problema. A quanto pare, il mio file /etc/ssl/certs/ca-certificates.crt era /etc/ssl/certs/ca-certificates.crt . L’ultima voce ha mostrato qualcosa di simile a questo:

 -----BEGIN CERTIFICATE----- MIIEDTCCAvWgAwIBAgIJAN..lots of certificate text....AwIBAgIJAN-----END CERTIFICATE----- 

Dopo aver aggiunto una nuova riga prima -----END CERTIFICATE----- , curl è stato in grado di gestire il file dei certificati.

Questo è stato molto fastidioso da scoprire dal momento che il mio comando update-ca-certificates non mi dava alcun avvertimento.

Questo può o non può essere un problema specifico della versione di arricciatura, quindi ecco la mia versione, solo per completezza:

 curl --version # curl 7.51.0 (x86_64-alpine-linux-musl) libcurl/7.51.0 OpenSSL/1.0.2j zlib/1.2.8 libssh2/1.7.0 # Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp # Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets 

Esegui il seguente comando in git bash che funziona bene per me

 git config --global http.sslverify "false" 

L’errore è dovuto a file di certificati della catena SSL corrotti o mancanti nella directory PKI. Dovrai assicurarti che i file siano raggruppati, seguendo i passaggi: Nella tua console / terminale:

 mkdir /usr/src/ca-certificates && cd /usr/src/ca-certificates 

Inserisci questo sito: https://rpmfind.net/linux/rpm2html/search.php?query=ca-certificates , ottieni il tuo ca-certificato, per SO. Copia url di download e incolla in url: wget your_url_donwload_ca-ceritificated.rpm ora, installa yout rpm:

 rpm2cpio your_url_donwload_ca-ceritificated.rpm | cpio -idmv 

ora riavvia il tuo servizio: il mio esempio questo comando:

 sudo service2 httpd restart 

Ho avuto lo stesso problema.

Questo è stato il mio errore

errore di impostazione ce
verificare le posizioni: CAfile: D: /git_repo/mingw32/ssl/certs/ca-bundle.crt CApath: none

Funziona bene per me

Rinominare il nome della directory di installazione git in git_repo “.

Risolto per me:

curl –remote-name –time-cond cacert.pem \ https://curl.haxx.se/ca/cacert.pem