web-dev-qa-db-fra.com

la vérification du certificat de serveur a échoué. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfichier: aucun

Je peux utiliser un projet de clonage en utilisant ssh, mais cela ne fonctionne pas lorsque je clone un projet avec https. il montre une erreur de message comme ci-dessous.

server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
275
Sokhom Ratanak

TLDR:

hostname=XXX
port=443
trust_cert_file_location=`curl-config --ca`

Sudo bash -c "echo -n | openssl s_client -showcerts -connect $hostname:$port \
    2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'  \
    >> $trust_cert_file_location"

Réponse longue

La raison fondamentale est que votre ordinateur ne fait pas confiance à l'autorité de certification qui a signé le certificat utilisé sur le serveur Gitlab . Cela ne signifie pas que le certificat est suspect, mais il peut être auto-signé ou signé par une institution/entreprise ne figurant pas dans la liste des autorités de certification de votre système d'exploitation. Ce que vous devez faire pour contourner le problème sur votre ordinateur , c'est lui dire de faire confiance à ce certificat - si vous n'avez aucune raison de vous en douter.

Vous devez vérifier le certificat Web utilisé pour votre serveur gitLab et l'ajouter à votre </git_installation_folder>/bin/curl-ca-bundle.crt.

Pour vérifier si au moins le clone fonctionne sans vérifier ledit certificat, vous pouvez définir:

export GIT_SSL_NO_VERIFY=1
#or
git config --global http.sslverify false

Mais ce ne serait que pour les tests, comme illustré dans " SSL fonctionne avec les navigateurs navigateur, wget et curl, mais échoue avec git ", ou dans ce article de blog .

Vérifiez vos paramètres GitLab, a in issue 4272 .


Pour obtenir ce certificat (que vous devez ajouter à votre fichier curl-ca-bundle.crt]), tapez un:

echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpGilabPort \
  2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'

(avec 'yourserver.com' comme nom de votre serveur GitLab)

Pour vérifier l'autorité de certification (émetteur de l'autorité de certification), tapez:

echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpGilabPort \
  2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
  | openssl x509 -noout -text | grep "CA Issuers" | head -1

Note: Valeriy Katkov suggère dans les commentaires d'ajouter l'option -servername à la commande openssl, sinon la commande n'est pas affichée certificat pour www.github.com dans Le cas de Valeriy.

openssl s_client -showcerts -servername www.github.com -connect www.github.com:443

Findekano ajoute dans les commentaires :

pour identifier l'emplacement de curl-ca-bundle.crt, vous pouvez utiliser la commande

curl-config --ca

Voir aussi ma réponse plus récente " github: la vérification du certificat de serveur a échoué ": vous devrez peut-être renommer ces certificats:

Sudo apt-get install --reinstall ca-certificates
Sudo mkdir /usr/local/share/ca-certificates/cacert.org
Sudo wget -P /usr/local/share/ca-certificates/cacert.org http://www.cacert.org/certs/root.crt http://www.cacert.org/certs/class3.crt
Sudo update-ca-certificates
git config --global http.sslCAinfo /etc/ssl/certs/ca-certificates.crt
346
VonC

Note: Ceci a majeur implications pour la sécurité.

Ouvrez votre terminal et lancez la commande suivante:

export GIT_SSL_NO_VERIFY=1

Cela fonctionne pour moi et j'utilise un système Linux.

184
Afzal Masood

Une autre cause de ce problème peut être que votre horloge est peut-être éteinte. Les certificats sont sensibles au temps.

Pour vérifier l'heure actuelle du système:

date -R

Vous pourriez envisager d’installer NTP pour synchroniser automatiquement l’heure système avec des serveurs de temps Internet sécurisés du groupe pool global NTP . Par exemple, pour installer sur Debian/Ubuntu:

apt-get install ntp
133
davidthings

Si vous utilisez un serveur git dans un réseau privé et utilisez un certificat auto-signé ou un certificat sur une adresse IP; vous pouvez aussi simplement utiliser la configuration globale de git pour désactiver les vérifications ssl:

git config --global http.sslverify "false"
51
Romain VDK

J'ai eu le même problème. Causé par une autorité de certification auto-émise. Résolu en ajoutant le fichier .pem à / usr/local/share/ca-certificates / et en appelant

Sudo update-ca-certificates

PS: le fichier pem du dossier ./share/ca-certificates DOIT avoir une extension .crt

42
Nikolay Ruban

Vérifiez votre horloge système,

$ date

Si ce n'est pas correct, la vérification du certificat échouera. Pour corriger l'horloge du système,

$ apt-get install ntp

L'horloge devrait se synchroniser.

Enfin, entrez à nouveau la commande de clonage.

31
mycowan
GIT_CURL_VERBOSE=1 git [clone|fetch]…

devrait vous dire où est le problème. Dans mon cas, cela était dû au fait que cURL ne prenait pas en charge les certificats PEM lorsqu’il était construit sur NSS, du fait que cette prise en charge n’était pas principale dans NSS ( # 726116# 804215# 402712etplus ).

21
Tobu

Ou simplement, lancez ce commentaire pour ajouter le certificat de serveur à votre base de données:

echo $(echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpGilabPort 2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p') >> /etc/ssl/certs/ca-certificates.crt

Ensuite, faites à nouveau git clone.

16
phiphu

Je me suis planté avec mes fichiers de CA pendant la configuration du proxy goagent. Impossible d'extraire les données de github et d'obtenir le même avertissement:

la vérification du certificat de serveur a échoué. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfichier: aucun

utilisez la méthode de Vonc, récupérez le certificat auprès de github et mettez-le dans /etc/ssl/certs/ca-certificates.crt, le problème est résolu.

echo -n | openssl s_client -showcerts -connect github.com:443 2>/dev/null | sed -ne '/ -BEGIN CERTIFICATE - /,/- CERTIFICAT DE FIN-/p'

9
IFQ

il n'est pas nécessaire de définir la vérification de git ssl sur false. Cela est dû au fait que le système ne dispose pas de tous les certificats d'autorité de certification. Généralement, les personnes qui possèdent un certificat SSL authentique ne possèdent pas le certificat intermédiaire.

Il suffit d’ajouter le texte complet du certificat intermédiaire (chaîne complète de certificats d’autorité de certification et intermédiaires manquants) à

Sudo gedit /etc/ssl/certs/ca-certificates.crt 

fonctionne sans exécuter le update-ca-certificates.

Il en va de même pour les certificats générés manuellement. Ajoutez simplement le texte du certificat de l'autorité de certification.

À la fin: Pousser avec succès: tout est à jour

8
abcdef12

J'ai installé Xubuntu sur un Raspberry Pi 2, j'ai rencontré le même problème avec le temps que NTP et la synchronisation automatique du serveur était désactivée (ou non installée). Obtenir NTP

Sudo apt-get install ntp

et remplacez "Manuel" par "Heure et date" par "Rester synchronisé avec les serveurs Internet"

3
user273711

Ajoutez éventuellement le fichier http.sslverify à votre fichier .git/config.

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "Origin"]
    url = https://server/user/project.git
    fetch = +refs/heads/*:refs/remotes/Origin/*
[branch "master"]
    remote = Origin
    merge = refs/heads/master
[http]
        sslVerify = false
1
Mickael L

Ce que j'ai fait pour résoudre ce problème dans le terminal (Ubuntu 18.04):

openssl s_client -showcerts -servername www.github.com -connect www.github.com:443

J'ai deux morceaux de morceaux de certificat. Et j'ai copié les fragments de certificat dans mon fichier de certificat dans /etc/ssl/certs/ca-certificates.crt.

1
mindcoder

Je viens de rencontrer le même problème avec un dépôt git qui fonctionne toujours pour moi. Le problème était que j'y ai accédé via un accès WiFi public, qui redirige vers un portail captif lors de la première connexion (par exemple, pour diffuser des annonces et accepter les règles).

0
Tosha

Faites copier le certificat et le lot dans un fichier .crt et assurez-vous qu'il y a une ligne vide entre les certificats du fichier.

Cela a fonctionné pour moi sur un serveur GitLab après avoir tout essayé sur Internet.

0
shambhu