Impossibile risolvere "impossibile ottenere il certificato emittente locale" utilizzando git su Windows con certificato autofirmato


283

Sto usando Git su Windows. Ho installato il pacchetto msysGit. Il mio repository di test ha un certificato autofirmato sul server. Posso accedere e utilizzare il repository tramite HTTP senza problemi. Passare a HTTPS dà l'errore:

Problema certificato SSL: impossibile ottenere il certificato emittente locale.

Ho il certificato autofirmato installato nelle autorità di certificazione radice affidabili del mio computer client Windows 7. Posso accedere all'URL del repository HTTPS in Internet Explorer senza messaggi di errore.

Questo post sul blog di Philip Kelley ha spiegato che cURL non utilizza l'archivio certificati della macchina client. Ho seguito il consiglio del post sul blog per creare una copia privata di curl-ca-bundle.crte configurare Git per usarlo. Sono sicuro che Git sta usando la mia copia. Se rinominassi la copia; Git si lamenta che il file non sia presente.

Ho incollato il mio certificato, come menzionato nel post del blog, ricevo ancora il messaggio "impossibile ottenere il certificato emittente locale".

Ho verificato che Git funzionava ancora clonando un repository GitHub tramite HTTPS.

L'unica cosa che vedo che è diversa dal post sul blog è che il mio certificato è il root - non c'è catena per raggiungerlo. Il mio certificato originariamente proveniva dal clic sul collegamento Gestione IIS8 IIS 'Crea certificato autofirmato'. Forse questo rende un certificato diverso in qualche modo da ciò che cURL si aspetta.

Come posso ottenere Git / cURL per accettare il certificato autofirmato?



1
Controlla anche se la tua rete locale è autorizzata a inviare file al repository github. Potrebbero esserci alcune restrizioni firewall o antivirus.
Shasi Kanth,

Se qualcuno affronta questo errore durante l'utilizzo di Bower, crea un file .bowerrc con contenuto { "strict-ssl": false }. Non ringraziarmi, grazie a questo ragazzo: stapp.space/fight-with-2 Ho combattuto con questo errore per quasi 5 ore, dritto !!
Ganesh Jadhav,

Risposte:


267

Apri Git Bash ed esegui il comando se desideri disabilitare completamente la verifica SSL.

git config --global http.sslVerify false

Nota: questa soluzione potrebbe aprirti ad attacchi come gli attacchi man-in-the-middle . Pertanto riattiva la verifica il prima possibile:

git config --global http.sslVerify true

70
Questa risposta sconfigge la sicurezza di SSL consentendo attacchi man-in-the-middle. Altre risposte spiegano già come configurare git per fidarsi del certificato specifico di cui hai bisogno.
dsh

12
risposta davvero orribile, non dici nemmeno loro di riattivare SSL. Questo è il motivo per cui si verificano vulnerabilità della sicurezza.
Edgar Aroutiounian,

Se stai usando Gitblit, allora nessun'altra opzione invece di fare sshVerify false.
Samir,

24
Per disabilitare la verifica TLS / SSL per un singolo comando git, utilizzare il seguente comando:git -c http.sslVerify=false clone https://domain.com/path/to/git
Maxim Suslov

1
Di seguito sono disponibili diverse soluzioni e ho già suggerito i contro. Quindi sta a te decidere quali soluzioni stai scegliendo per risolvere il problema.
Samir,

154

Il problema è che git di default usa il backend crittografico "Linux".

A partire da Git per Windows 2.14, ora puoi configurare Git per usare SChannel, il livello di rete di Windows integrato come back-end crittografico. Ciò significa che utilizzerà il meccanismo di archiviazione dei certificati di Windows e non è necessario configurare esplicitamente il meccanismo di archiviazione CA arricciato: https://msdn.microsoft.com/en-us/library/windows/desktop/aa380123(v= vs.85) aspx

Esegui solo:

git config --global http.sslbackend schannel

Questo dovrebbe aiutare.

L'uso di schannel è ormai l'impostazione standard quando si installa git per Windows, inoltre si consiglia di non verificare più i repository da SSH, se possibile, poiché https è più facile da configurare e meno probabilità di essere bloccato da un firewall significa meno possibilità di errore.


1
Si noti tuttavia che questa soluzione può git config --global http.sslCAInfo <my-server-self-signed-cert.pem>non riuscire a funzionare. Ho configurato http.sslCAInfoper utilizzare un certificato autofirmato per il mio server ed è il motivo (potrebbe non essere lo stesso di OP) che ho riscontrato "Problema certificato SSL: impossibile ottenere il certificato emittente locale" quando ad esempio a git clone https://github.com/Microsoft/vscode.git. Alla fine ho usato la risposta da stackoverflow.com/a/47196562/1323552 (Ben PP Tung) per ottimizzare la mia configurazione sslCAInfo specifica per il mio server git per risolverlo.
Johnny Wong,

95

Ho avuto anche questo problema. Nel mio caso, stavo cercando di ottenere un hook Git post-ricezione per aggiornare una copia funzionante su un server con ogni push. Ho provato a seguire le istruzioni nel blog a cui ti sei collegato. Non ha funzionato anche per me e non ha funzionato neanche l'override delle impostazioni per utente.

Quello che ho dovuto fare è stato disabilitare la verifica SSL (come menzionato nell'articolo) per Git nel suo insieme. Non è la soluzione perfetta, ma funzionerà fino a quando non riuscirò a trovarne una migliore.

Ho modificato il file di testo di configurazione di Git (con la mia app neutra di fine linea preferita come Notepad ++) che si trova in:

C: \ Programmi (x86) \ Git \ etc \ gitconfig

Nel blocco [http], ho aggiunto un'opzione per disabilitare sslVerify. Sembrava così quando avevo finito:

[http]
    sslVerify = false
    sslCAinfo = /bin/curl-ca-bundle.crt

Questo ha funzionato.

NOTA:

  • Questo disabilita la verifica SSL e non è raccomandato come soluzione a lungo termine.

  • È possibile disabilitare questo repository che non è ancora eccezionale, ma localizza l'impostazione.

  • Con l'avvento di LetsEncrypt.org, ora è abbastanza semplice, automatizzato e gratuito impostare SSL come alternativa ai certificati autofirmati e annulla la necessità di disattivare sslVerify.


145
Ciò vanifica lo scopo di SSL.
syaz,

49
è possibile utilizzare il comando "git config --global http.sslVerify false" per disabilitare la verifica SSL
CleanCoder

6
Grazie per aver segnalato la sslCAinfovoce di configurazione; ma non sto annullando la risposta poiché non ha molto senso disabilitare in modo permanente SSL per git a livello di sistema (hai provato a disabilitarlo a livello di sistema, quindi a clonarlo, quindi riattivarlo e quindi disabilitarlo nel config git locale per il repository appena clonato?).
7heo.tk,

35
Per un comando unico, non è necessario modificare i file di configurazione:git -c http.sslVerify=false clone https://...
punti


51

kiddailey Penso che fosse abbastanza vicino, tuttavia non disabiliterei la verifica SSL ma piuttosto il certificato locale:

Nel file di configurazione di Git

[http]
    sslCAinfo = /bin/curl-ca-bundle.crt

O tramite riga di comando:

git config --global http.sslCAinfo /bin/curl-ca-bundle.crt

7
Su git per Windows, questo ègit config --global http.sslCAinfo /usr/ssl/certs/ca-bundle.crt
Karsten Tinnefeld,

O per megit config --global http.sslCAinfo /c/Program\ Files\ \(x86\)/Git/bin/curl-ca-bundle.crt
sparrowt

Per gli utenti su MacPorts, questo ègit config --global http.sslCAinfo /opt/local/share/curl/curl-ca-bundle.crt
miken32

3
Con Git 2.8 puoi git config --list --show-originvedere dove è impostata la configurazione di http.sslCAinfo
Anish,

La mia posizione del certificato su mac è: ~ / macports / share / curl / curl-ca-bundle.crt
user3282611

47

Ho affrontato anche questo problema. E finalmente risolto ottenendo indicazioni da questo blog MSDN .

Aggiornare

In realtà è necessario aggiungere il certificato nel file dei certificati di git curl-ca-bundel.cert che risiede nella directory Git \ bin.

passi

  1. Apri la tua pagina github nel browser e fai clic sull'icona di blocco nella barra degli indirizzi.
  2. Nella finestra popup visualizzata verso l'alto, vai al link "Visualizza certificato", si aprirà una finestra popup.
  3. In cui passare alla scheda certificati (3 ° nel mio caso). Seleziona il nodo principale che è il certificato radice. E premere il pulsante Copia certificato in fondo e salvare il file.
  4. In Esplora file, vai alla directory Git \ bin e apri curl-ca-bundle.crt nell'editor di testo.
  5. Aprire anche il file del certificato esportato (nel passaggio 3) nell'editor di testo.
  6. Copia tutto il contenuto dal certificato esportato alla fine di curl-ca-bundle.crt e salva.

Infine controlla lo stato. Si prega di notare che il backup curl-ca-bundle.crt file prima della modifica per rimanere sul sicuro.


3
"naviga nella directory Git \ bin e apri curl-ca-bundle.crt" Non c'è curl-ca-bundle.crt in git \ bin!
Anton K,

@AntonK se non esiste, creane uno tu stesso nel blocco note e rinominalo con curl-ca-bundle.crt. Altri passaggi rimangono gli stessi.
Nadeem Jamali,

16
@AntonK Può essere chiamato giusto ca-bundle.crted essere situato in mingw64\ssl\certso mingw32\ssl\certs.
Ian Kemp,

Usato per Atlassian's SourceTree. L'installazione in bundle di GIT è in% userprofile% \ appdata \ local \ attlassian \ sourcetree \ git_local. curl-ca-bundle.crt esisteva già, aggiunto il mio certificato root esportato con codifica base64.
Xanothos,

40

La risposta a questa domanda Usando makecert per lo sviluppo SSL mi ha risolto questo problema.

Non so perché, ma il certificato creato dal semplice collegamento "Crea certificato autofirmato" in Gestione IIS non funziona. Ho seguito l'approccio nella domanda collegata di creazione e installazione di una radice CA autofirmata; quindi usarlo per emettere un certificato di autenticazione server per il mio server. Li ho installati entrambi in IIS.

Ciò porta la mia situazione allo stesso modo del post sul blog a cui fa riferimento la domanda originale. Una volta che il certificato radice è stato copiato / incollato in curl-ca-bundle.crt, la combo git / curl è stata soddisfatta.


"Non so perché, ma il certificato creato dal semplice link" Crea certificato autofirmato "in Gestione IIS non fa il trucco ..." - Il meglio che posso dire, crea certificati non validi. Ci sono molte regole durante la creazione di certificati X.509; il "fai il minimo per farlo funzionare" non funziona più bene. Vedi anche Come si firma la richiesta di firma del certificato con l'autorità di certificazione e come si crea un certificato autofirmato con openssl?
jww,

Questo ha funzionato per me, ma sono stato temporaneamente bloccato dalla parte "Li ho installati entrambi in IIS". Per chiarificare per altri ... il cert del server è assegnato in IIS e la CA principale deve essere importata in "Autorità di certificazione radice attendibili" tramite l'utilità di gestione certificati di Windows (certmgr.msc)
Philip

26

Per evitare di disabilitare completamente la verifica SSL o duplicare / hackerare il file di certificato CA in bundle utilizzato da git, è possibile esportare la catena di certificati dell'host in un file e fare in modo che git lo usi:

git config --global http.https://the.host.com/.sslCAInfo c:/users/me/the.host.com.cer

Se ciò non funziona, puoi disabilitare la verifica ssl solo per l'host:

git config --global http.https://the.host.com/.sslVerify false

Nota: sottoposto a possibili attacchi man in the middle quando la verifica ssl è disattivata.


4
Vale la pena notare che l' --globalopzione non è necessaria: se si omette --global, l'impostazione si applica solo a quel particolare repository git.
Wes Turner

19

Ho appena avuto lo stesso problema, ma usando sourcetree su Windows Stessi passi per GIT normale anche su Windows. Seguendo i seguenti passaggi sono stato in grado di risolvere questo problema.

  1. Ottieni l'albero dei certificati del server Questo può essere fatto usando Chrome. Navigare per essere l'indirizzo del server. Fare clic sull'icona del lucchetto e visualizzare i certificati. Esporta tutta la catena di certificati in formato PEM (file con codifica base64).
  2. Aggiungi i certificati alla catena di fiducia del tuo file di configurazione di fiducia GIT Esegui "git config --list". trova la configurazione "http.sslcainfo" che mostra dove si trova il file di attendibilità del certificato. Copia tutti i certificati nel file della catena di fiducia inclusi "- -BEGIN- -" e "- -END- -".
  3. Assicurati di aggiungere l'intera catena di certificati al file dei certificati

Ciò dovrebbe risolvere il problema con i certificati autofirmati e l'utilizzo di GIT.

Ho provato a utilizzare la configurazione "http.sslcapath" ma questo non ha funzionato. Anche se non includessi l'intera catena nel file dei certificati, anche questo fallirebbe. Se qualcuno ha dei suggerimenti su questi, fammi sapere perché quanto sopra deve essere ripetuto per una nuova installazione.

Se questo è GIT di sistema, è possibile utilizzare le opzioni in STRUMENTI -> scheda Opzioni GIt per utilizzare GIT di sistema e questo risolve anche il problema in sourcetree.


2
"Se non includessi l'intera catena nel file dei certificati, anche questo fallirebbe" - Mi sono appena imbattuto in questo problema
Amani Kilumanga,

Per quanto riguarda l'inclusione dell'intera catena, ho due certificati sopra il certificato github. Li includo come root-> next cert-> github cert nel file sslcainfo.crt?
Jecoms,

Sono stato in grado di accedere ai pacchetti repo git semplicemente aggiungendo il certificato root.
Jecoms,

Per i futuri lettori. Non ho idea se è importante, ma ho inserito il certificato "root" (più in alto) alla fine del file (http.sslcainfo). E poi, mentre mi allontanavo dal certificato root nella catena, ho inserito quel certificato sopra la voce precedente del file (http.sslcainfo).
granadaCoder

11

In caso di repository github (o di eventuali certificati autofirmati) , scegliendo di seguito durante l'installazione di Git-on-windows, il problema è stato risolto.

inserisci qui la descrizione dell'immagine


1
Sembra che tu abbia risposto a una domanda diversa. La domanda del PO riguardava i certificati autofirmati sui client Windows.
jww,

@jww il titolo della domanda è un messaggio di errore git che viene mostrato anche se il repository NON è SSL autofirmato!
Jawad Al Shaikh,

Questo mi ha fatto superare l'errore, ma per me l'accesso a GitHub Enterprise ha richiesto la generazione di alcune chiavi e l'aggiunta di chiavi pubbliche / private.
ΩmegaMan,

1
Se il certificato autofirmato è stato inserito nell'archivio certificati di Windows da un utile amministratore di Windows tramite un criterio di gruppo, anche questa risposta è buona.
JamesD

7

Ho già riscontrato questo problema e risolverlo utilizzando la seguente configurazione.

[http "https://your.domain"] sslCAInfo=/path/to/your/domain/priviate-certificate

Da git 2.3.1, puoi inserire https://your.domaindopo http per indicare che il seguente certificato è solo per esso.


1
Questa è la soluzione più semplice e precisa che ho trovato, anche se hai già configurato in git config --global http.sslCAInfo <your-server-self-signed-cert.pem>precedenza (quindi causando l'errore "impossibile ottenere il certificato dell'emittente locale")
Johnny Wong,

QUESTA era la risposta corretta al mio problema (e non semplicemente "disabilitare la convalida SSL" ~~). Non sapevo che è possibile specificare la posizione del certificato solo per un host specifico. Asso!
Rocío García Luque,

1
  1. Scarica il certificato da questo link: https://github.com/bagder/ca-bundle
  2. Aggiungilo a C:\Program Files\Git\bin eC:\Program Files\Git\mingw64\bin

Quindi prova qualcosa del tipo: git clone https://github.com/heroku/node-js-getting-started.git


1

Una cosa che mi ha incasinato è stato il formato del percorso (sul mio PC Windows). Inizialmente avevo questo:

git config --global http.sslCAInfo C:\certs\cacert.pem

Ma ciò non è riuscito con l'errore "impossibile ottenere il certificato dell'emittente locale".

Ciò che alla fine ha funzionato è stato questo:

git config --global http.sslCAInfo "C:\\certs\\cacert.pem"

1

Nel mio caso, poiché ho installato ConEmu Terminal per Windows 7, crea l' ca-bundleinstallazione durante C:\Program Files\Git\mingw64\ssl\certs.

Quindi, devo eseguire i seguenti comandi sul terminale per farlo funzionare:

$ git config --global http.sslbackend schannel
$ git config --global http.sslcainfo /mingw64/ssl/certs/ca-bundle.crt

Quindi, il mio C:\Program Files\Git\etc\gitconfigcontiene quanto segue:

[http]
    sslBackend = schannel
    sslCAinfo = /mingw64/ssl/certs/ca-bundle.crt

Inoltre, ho scelto la stessa opzione menzionata qui durante l'installazione di Git.

Spero che aiuti!


1

Per correggere l'errore specifico del certificato SSL: impossibile ottenere il certificato dell'emittente locale in git

Ho avuto lo stesso problema con i certificati Let's Encrypt.

Un sito web con https ci serve solo:

SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

ma git pull dice:

fatal: unable to access 'https://example.com/git/demo.git/': SSL certificate problem: unable to get local issuer certificate

Per risolverlo, dobbiamo anche aggiungere:

SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

-5

Utilizzare questo comando prima di eseguire l'aggiornamento / installazione del compositore:

git config --global http.sslverify false
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.