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.
3 réponses
brièvement:
- Obtenir le certificat auto-signé
- mettre dans certains (par exemple
~/git-certs/cert.pem
) fichier - définir
git
pour faire confiance à ce certificat en utilisanthttp.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).
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.
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