configurer Git pour accepter un certificat de serveur auto-signé particulier pour une télécommande https particulière

le sysadmin d'un projet sur lequel je suis a décidé que SSH était" too much trouble"; au lieu de cela, il a mis en place Git pour être accessible via une URL https:// (et l'authentification nom d'utilisateur/mot de passe). Le serveur de cette URL présente un certificat auto-signé, il a donc conseillé à tout le monde de désactiver la validation du certificat. Cela ne me paraît une bonne installation, de la sécurité.

est-il possible de dire à Git que pour remote X (ou mieux, n'importe quelle remote dans n'importe quel dépôt qui se trouve à commencer par https://$SERVERNAME/ ) il est d'accepter un certificat particulier, et seulement ce certificat? Essentiellement reduplicate le comportement de la clé du serveur de SSH.

116
demandé sur zwol 2012-01-31 03:31:55

3 réponses

brièvement:

  1. Obtenir le certificat auto-signé
  2. mettre dans certains (par exemple ~/git-certs/cert.pem ) fichier
  3. définir git pour faire confiance à ce certificat en utilisant http.sslCAInfo paramètre

plus de détails:

Obtenir le certificat d'auto-signature de du serveur distant

en supposant que L'URL du serveur est repos.sample.com et que vous voulez accès par le port 443 .

Il y a plusieurs options, comment l'obtenir.

obtenir un certificat en utilisant openssl

$ openssl s_client -connect repos.sample.com:443

Enregistrer la sortie dans un fichier cert.pem et supprimer tout sauf une partie entre (et incluant) -BEGIN CERTIFICATE- et -END CERTIFICATE-

le Contenu du fichier résultant ~/git-certs/cert.pem peut ressembler à ceci:

-----BEGIN CERTIFICATE-----
MIIDnzCCAocCBE/xnXAwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNVBAYTAkRFMRUw
EwYDVQQIEwxMb3dlciBTYXhvbnkxEjAQBgNVBAcTCVdvbGZzYnVyZzEYMBYGA1UE
ChMPU2FhUy1TZWN1cmUuY29tMRowGAYDVQQDFBEqLnNhYXMtc2VjdXJlLmNvbTEj
MCEGCSqGSIb3DQEJARYUaW5mb0BzYWFzLXNlY3VyZS5jb20wHhcNMTIwNzAyMTMw
OTA0WhcNMTMwNzAyMTMwOTA0WjCBkzELMAkGA1UEBhMCREUxFTATBgNVBAgTDExv
d2VyIFNheG9ueTESMBAGA1UEBxMJV29sZnNidXJnMRgwFgYDVQQKEw9TYWFTLVNl
Y3VyZS5jb20xGjAYBgNVBAMUESouc2Fhcy1zZWN1cmUuY29tMSMwIQYJKoZIhvcN
AQkBFhRpbmZvQHNhYXMtc2VjdXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAMUZ472W3EVFYGSHTgFV0LR2YVE1U//sZimhCKGFBhH3ZfGwqtu7
mzOhlCQef9nqGxgH+U5DG43B6MxDzhoP7R8e1GLbNH3xVqMHqEdcek8jtiJvfj2a
pRSkFTCVJ9i0GYFOQfQYV6RJ4vAunQioiw07OmsxL6C5l3K/r+qJTlStpPK5dv4z
Sy+jmAcQMaIcWv8wgBAxdzo8UVwIL63gLlBz7WfSB2Ti5XBbse/83wyNa5bPJPf1
U+7uLSofz+dehHtgtKfHD8XpPoQBt0Y9ExbLN1ysdR9XfsNfBI5K6Uokq/tVDxNi
SHM4/7uKNo/4b7OP24hvCeXW8oRyRzpyDxMCAwEAATANBgkqhkiG9w0BAQUFAAOC
AQEAp7S/E1ZGCey5Oyn3qwP4q+geQqOhRtaPqdH6ABnqUYHcGYB77GcStQxnqnOZ
MJwIaIZqlz+59taB6U2lG30u3cZ1FITuz+fWXdfELKPWPjDoHkwumkz3zcCVrrtI
ktRzk7AeazHcLEwkUjB5Rm75N9+dOo6Ay89JCcPKb+tNqOszY10y6U3kX3uiSzrJ
ejSq/tRyvMFT1FlJ8tKoZBWbkThevMhx7jk5qsoCpLPmPoYCEoLEtpMYiQnDZgUc
TNoL1GjoDrjgmSen4QN5QZEGTOe/dsv1sGxWC+Tv/VwUl2GqVtKPZdKtGFqI8TLn
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----

obtenir le certificat en utilisant votre navigateur web

J'utilise Redmine avec des dépôts Git et j'accède à la même URL pour L'interface utilisateur web et pour l'accès en ligne de commande git. De cette façon, j'ai dû ajouter une exception pour ce domaine dans mon navigateur web.

en utilisant Firefox, je suis allé à Options -> Advanced -> Certificates -> View Certificates -> Servers , trouvé là l'hôte autosigné, l'a sélectionné et en utilisant Export bouton j'ai eu exactement le même fichier, tel que créé en utilisant openssl .

Note: j'ai été un peu surpris, il y a aucun nom de l'autorité visiblement mentionnée. C'est très bien.

Avoir le certificat de confiance dans un fichier

étapes Précédentes doit permettre d'avoir le certificat dans un fichier. Il n'a pas d'importance, ce fichier, il est tant qu'il est visible à votre git lors de l'accès à ce domaine. J'ai utilisé ~/git-certs/cert.pem

Note: Si vous avez besoin de plus de certificats autosignés fiables, mettez-les dans le même fichier:

-----BEGIN CERTIFICATE-----
MIIDnzCCAocCBE/xnXAwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNVBAYTAkRFMRUw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
AnOtHeRtRuStEdCeRtIfIcAtEgOeShErExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----

cela doit fonctionner (mais je l'ai testé seulement avec un seul certificat).

configurer git pour faire confiance à ce certificat

$ git config --global http.sslCAInfo /home/javl/git-certs/cert.pem

vous pouvez également essayer de le faire à l'échelle du système, en utilisant --system au lieu de --global .

et le tester: vous pourrez désormais communiquer avec votre serveur sans avoir recours à:

$ git config --global http.sslVerify false #NO NEED TO USE THIS

si vous avez déjà mis votre git à l'ignorance de ssl certificats, décors:

$ git config --global --unset http.sslVerify

et vous pouvez aussi vérifier, que vous avez tout fait correctement, sans fautes d'orthographe:

$ git config --global --list

ce qui devrait énumérer toutes les variables, vous avez défini globalement. (Je mispelled http htt).

225
répondu Jan Vlcinsky 2018-02-12 16:26:20

selon cette page sur aeminium.org vous devez ajouter un élément de configuration http.sslCAInfo ou http.sslCAPath .git/config qui contient le certificat du serveur web.

6
répondu Rudi 2012-11-05 15:51:24

OSX réglage Utilisateur.

en suivant les étapes de la réponse acceptée a fonctionné pour moi avec un petit ajout lors de la configuration sur OSX.

j'ai mis le cert.le fichier pem dans un répertoire sous mon OSX s'est connecté à l'utilisateur et m'a donc amené à ajuster l'emplacement du certificat de confiance.

Configurer git à faire confiance à ce certificat:

$ git config -- global http.sslCAInfo $HOME/git-certs / cert.pem

1
répondu Chris Langston 2016-05-11 13:41:10