practices - git tag remove
configurar Git para que acepte un certificado de servidor autofirmado en particular para un control remoto https en particular (3)
Ajustes de usuario OSX.
Seguir los pasos de la respuesta aceptada funcionó para mí con una pequeña adición al configurar en OSX.
Puse el archivo cert.pem en un directorio debajo de mi usuario con sesión OSX y por eso me obligué a ajustar la ubicación para el certificado de confianza.
Configura git para confiar en este certificado:
$ git config --global http.sslCAInfo $ HOME / git-certs / cert.pem
El administrador del sistema para un proyecto en el que estoy ha decidido que SSH es "demasiado problema"; en su lugar, configuró Git para ser accesible a través de una URL https://
(y autenticación de nombre de usuario / contraseña). El servidor de esta URL presenta un certificado autofirmado, por lo que aconseja a todos que desactiven la validación de certificados. Esto no me parece una buena configuración, en cuanto a seguridad.
¿Es posible decirle a Git que para X remota (o mejor, cualquier control remoto en cualquier repositorio que empiece por https://$SERVERNAME/
) es para aceptar un certificado en particular, y solo ese certificado? Básicamente reduplicar el comportamiento de la clave de servidor de SSH.
Brevemente:
- Obtenga el certificado autofirmado
- Póngalo en algún archivo (ej.
~/git-certs/cert.pem
) - Establezca
git
para confiar en este certificado utilizando el parámetrohttp.sslCAInfo
En más detalles:
Obtenga un certificado autofirmado de servidor remoto
Asumiendo, la URL del servidor es repos.sample.com
y desea acceder a ella a través del puerto 443
.
Hay múltiples opciones, como obtenerlo.
Obtener certificado usando openssl
$ openssl s_client -connect repos.sample.com:443
cert.pem
el resultado en un archivo cert.pem
y elimine todo menos parte entre (e incluido) -BEGIN CERTIFICATE-
y -END CERTIFICATE-
El contenido del archivo resultante ~ / git-certs / cert.pem puede verse así:
-----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-----
Obtenga un certificado usando su navegador web
Uso Redmine con repositorios de Git y accedo a la misma URL para la interfaz de usuario web y para el acceso a la línea de comandos de git. De esta forma, tuve que agregar una excepción para ese dominio en mi navegador web.
Usando Firefox, fui a Options -> Advanced -> Certificates -> View Certificates -> Servers
, encontré el host autofirmado, lo seleccioné y utilicé el botón Export
Obtuve exactamente el mismo archivo, como el creado usando openssl
.
Nota: estaba un poco sorprendido, no hay ningún nombre de la autoridad visiblemente mencionado. Esto esta bien.
Tener el certificado de confianza en el archivo dedicado
Los pasos anteriores darán como resultado tener el certificado en algún archivo. No importa, qué archivo es, siempre y cuando sea visible para su git cuando acceda a ese dominio. ~/git-certs/cert.pem
Nota: si necesita más certificados autofirmados de confianza, colóquelos en el mismo archivo:
-----BEGIN CERTIFICATE-----
MIIDnzCCAocCBE/xnXAwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNVBAYTAkRFMRUw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
AnOtHeRtRuStEdCeRtIfIcAtEgOeShErExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----
Esto funcionará (pero lo probé solo con certificado único).
Configura git para confiar en este certificado
$ git config --global http.sslCAInfo /home/javl/git-certs/cert.pem
También puede intentar hacer todo ese sistema, usando --system
lugar de --global
.
Y pruébelo: ahora podrá comunicarse con su servidor sin recurrir a:
$ git config --global http.sslVerify false #NO NEED TO USE THIS
Si ya configura su git como ignorante de los certificados ssl, desactívelo:
$ git config --global --unset http.sslVerify
y también puedes verificar que lo hiciste todo correctamente, sin errores ortográficos:
$ git config --global --list
¿Qué debería enumerar todas las variables, que ha establecido globalmente? (He escrito mal http a htt).
De acuerdo con esta página en aeminium.org , debe agregar un elemento de configuración http.sslCAInfo
o http.sslCAPath
a .git / config, que contiene el certificado del servidor web.