238 votes

configurer Git d'accepter une auto-signé le certificat de serveur pour un particulier https distance

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

Est-il possible d'indiquer à Git que pour la distance X (ou mieux, toute distance dans un référentiel qui se passe à commencer par https://$SERVERNAME/) c'est d'accepter un certificat en particulier, et seulement ce certificat? Fondamentalement reduplicate SSH du serveur-le comportement de la touche.

427voto

Jan Vlcinsky Points 7932

Brièvement:

  1. obtenir le certificat auto-signé
  2. mettre dans certains (par exemple ~/git-certs/cert.pem) fichier
  3. ensemble git à faire confiance à ce certificat à l'aide de http.sslCAInfo paramètre.

En plus de détails:

Obtenir certificat d'auto-signature de du serveur distant

En supposant, l'url du serveur est - repos.sample.com et vous souhaitez y avoir accès sur le port 443.

Il y a plusieurs options, comment l'obtenir.

obtenir cert à l'aide d'openssl

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

Attraper la sortie vers un fichier, cert.pem et de supprimer toutes les mais la partie entre (et y compris) -BEGIN CERTIFICATE- et -END CERTIFICATE-

Le contenu des fichier ~/git-certs/cert.le cpe 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 cert à l'aide de votre navigateur web

J'utilise redmine avec git repos et j'ai accès à la même url pour l'INTERFACE web et pour git en ligne de commande d'accès. De cette façon, j'ai dû ajouter une exception pour ce domaine dans mon navigateur web.

L'utilisation de Firefox, je suis allé à l' Preferences -> Advanced -> Encryption -> View Certificates -> Authorities, y trouvaient le autosignés autorité, sélectionné et en l'utilisant en Export bouton j'ai eu exactement le même fichier créé à l'aide d'openssl.

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

Avoir le certificat de confiance dans le fichier dédié

Les é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

Remarque: Si vous avez besoin de plus de confiance des certificats autosignés, les mettre dans le même fichier:

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

C'est le travail (mais je l'ai testé uniquement avec un seul certificat).

Configurer git à 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, à l'aide de --system au lieu de --global.

Et de le tester: Vous ne devez maintenant être en mesure de communiquer avec votre serveur sans avoir recours à:

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

Si vous avez déjà réglé votre git à l'ignorance de certificats ssl, unset:

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

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

$ git config --global --list

ce qui devrait liste de toutes les variables, vous avez défini à l'échelle mondiale. (Je mispelled http htt).

6voto

Rudi Points 8756

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X