remove - git tag best practices
¿Cómo puedo hacer que git acepte un certificado autofirmado? (12)
.Gitconfig global para autoridades de certificados autofirmados
Por mi propio bien y el de mis colegas aquí es cómo conseguimos que los certificados autofirmados funcionaran sin deshabilitar sslVerify
. Edite su .gitconfig
para usar git config --global -e
agregue estos:
# Specify the scheme and host as a ''context'' that only these settings apply
# Must use Git v1.8.5+ for these contexts to work
[credential "https://your.domain.com"]
username = user.name
# Uncomment the credential helper that applies to your platform
# Windows
# helper = manager
# OSX
# helper = osxkeychain
# Linux (in-memory credential helper)
# helper = cache
# Linux (permanent storage credential helper)
# https://askubuntu.com/a/776335/491772
# Specify the scheme and host as a ''context'' that only these settings apply
# Must use Git v1.8.5+ for these contexts to work
[http "https://your.domain.com"]
##################################
# Self Signed Server Certificate #
##################################
# MUST be PEM format
# Some situations require both the CAPath AND CAInfo
sslCAInfo = /path/to/selfCA/self-signed-certificate.crt
sslCAPath = /path/to/selfCA/
sslVerify = true
###########################################
# Private Key and Certificate information #
###########################################
# Must be PEM format and include BEGIN CERTIFICATE / END CERTIFICATE,
# not just the BEGIN PRIVATE KEY / END PRIVATE KEY for Git to recognise it.
sslCert = /path/to/privatekey/myprivatecert.pem
# Even if your PEM file is password protected, set this to false.
# Setting this to true always asks for a password even if you don''t have one.
# When you do have a password, even with this set to false it will prompt anyhow.
sslCertPasswordProtected = 0
Referencias:
- Credenciales Git
- Git Credential Store
- Usando Gnome Keyring como almacén de credenciales
- Git Config http. <url>. * Compatible con Git v1.8.5
Especifique config cuando git clone
-ing
Si necesita aplicarlo por repo, la documentación le indica que simplemente ejecute git config --local
en su directorio de repos. Bueno, eso no es útil cuando no tienes el repositorio clonado localmente, ¿no es así?
Puedes hacer el global -> local
hokey-pokey global configurando tu configuración global como se indica arriba y luego copiar esas configuraciones a tu configuración de repositorio local una vez que clone ...
O lo que puede hacer es especificar los comandos de configuración en el git clone
que se aplican al repositorio de destino una vez que se clona.
# Declare variables to make clone command less verbose
OUR_CA_PATH=/path/to/selfCA/
OUR_CA_FILE=$OUR_CA_PATH/self-signed-certificate.crt
MY_PEM_FILE=/path/to/privatekey/myprivatecert.pem
SELF_SIGN_CONFIG="-c http.sslCAPath=$OUR_CA_PATH -c http.sslCAInfo=$OUR_CA_FILE -c http.sslVerify=1 -c http.sslCert=$MY_PEM_FILE -c http.sslCertPasswordProtected=0"
# With this environment variable defined it makes subsequent clones easier if you need to pull down multiple repos.
git clone $SELF_SIGN_CONFIG https://mygit.server.com/projects/myproject.git myproject/
Un trazador de líneas
EDITAR: vea la answer VonC que señala una advertencia sobre las rutas absolutas y relativas para versiones específicas de git de 2.14.x / 2.15 a este único forro
git clone -c http.sslCAPath="/path/to/selfCA" -c http.sslCAInfo="/path/to/selfCA/self-signed-certificate.crt" -c http.sslVerify=1 -c http.sslCert="/path/to/privatekey/myprivatecert.pem" -c http.sslCertPasswordProtected=0 https://mygit.server.com/projects/myproject.git myproject/
CentOS unable to load client key
Si está intentando esto en CentOS y su archivo .pem
está dando
unable to load client key: "-8178 (SEC_ERROR_BAD_KEY)"
Entonces querrá esta respuesta de StackOverflow sobre cómo curl
utiliza NSS en lugar de Open SSL.
Y te gustará querer reconstruir curl
desde la fuente :
git clone http://github.com/curl/curl.git curl/
cd curl/
# Need these for ./buildconf
yum install autoconf automake libtool m4 nroff perl -y
#Need these for ./configure
yum install openssl-devel openldap-devel libssh2-devel -y
./buildconf
su # Switch to super user to install into /usr/bin/curl
./configure --with-openssl --with-ldap --with-libssh2 --prefix=/usr/
make
make install
reinicie la computadora ya que libcurl todavía está en la memoria como una biblioteca compartida
Python, pip y conda
Relacionado : ¿Cómo agregar un certificado CA Root personalizado a la tienda de CA que usa Python en Windows?
Usando Git, ¿hay alguna manera de decirle que acepte un certificado autofirmado?
Estoy usando un servidor https para alojar un servidor git pero por ahora el certificado está autofirmado.
Cuando intento crear el repositorio por primera vez:
git push origin master -f
Me sale el error
error: Cannot access URL
https://the server/git.aspx/PocketReferences/, return code 22
fatal: git-http-push failed
Aceptar permanentemente un certificado específico.
Pruebe http.sslCAPath
o http.sslCAInfo
. La respuesta de Adam Spires da algunos grandes ejemplos. Esta es la solución más segura a la pregunta.
Para deshabilitar la verificación TLS / SSL para un solo comando git
intente pasar de -c
a git
con la variable de configuración adecuada, o use la respuesta de Flow :
git -c http.sslVerify=false clone https://example.com/path/to/git
Para deshabilitar la verificación SSL para un repositorio específico
Si el repositorio está completamente bajo su control, puede probar:
git config http.sslVerify false
Deshabilitar la verificación del certificado TLS (/ SSL) globalmente es una práctica terriblemente insegura. No lo hagas No emita el comando anterior con un modificador --global
.
Hay bastantes opciones de configuración SSL en git
. Desde la página man de git config
:
http.sslVerify
Whether to verify the SSL certificate when fetching or pushing over HTTPS.
Can be overridden by the GIT_SSL_NO_VERIFY environment variable.
http.sslCAInfo
File containing the certificates to verify the peer with when fetching or pushing
over HTTPS. Can be overridden by the GIT_SSL_CAINFO environment variable.
http.sslCAPath
Path containing files with the CA certificates to verify the peer with when
fetching or pushing over HTTPS.
Can be overridden by the GIT_SSL_CAPATH environment variable.
Algunas otras opciones de configuración SSL útiles:
http.sslCert
File containing the SSL certificate when fetching or pushing over HTTPS.
Can be overridden by the GIT_SSL_CERT environment variable.
http.sslKey
File containing the SSL private key when fetching or pushing over HTTPS.
Can be overridden by the GIT_SSL_KEY environment variable.
http.sslCertPasswordProtected
Enable git''s password prompt for the SSL certificate. Otherwise OpenSSL will
prompt the user, possibly many times, if the certificate or private key is encrypted.
Can be overridden by the GIT_SSL_CERT_PASSWORD_PROTECTED environment variable.
Ejecuta el siguiente comando:
git config --global http.sslVerify false
En el archivo .gitconfig puede agregar el siguiente valor dado para que el certificado autofirmado sea aceptable
sslCAInfo = /home/XXXX/abc.crt
Esta respuesta es un extracto de este artículo escrito por Michael Kauffman.
Utilice Git para Windows con un certificado SSL corporativo
Asunto :
Si tiene un certificado SSL corporativo y desea clonar su repositorio desde la consola o VSCode, obtendrá el siguiente error:
fatal: no https://myserver/tfs/DefaultCollection/_git/Proj/ acceder a '' https://myserver/tfs/DefaultCollection/_git/Proj/ '': Problema de certificado SSL: no se puede obtener el certificado del emisor local
Solución :
Exportar el certificado autofirmado de la raíz a un archivo. Puedes hacerlo desde tu navegador.
Localice el archivo "ca-bundle.crt" en su carpeta de git (versión actual C: / Archivos de programa / Git / usr / ssl / certs, pero ha cambiado en el pasado). Copia el archivo a tu perfil de usuario. Ábralo con un editor de texto como VSCode y agregue el contenido de su certificado exportado al final del archivo.
Ahora tenemos que configurar git para usar el nuevo archivo:
git config --global http.sslCAInfo C:/Users/<yourname>/ca-bundle.crt
Esto agregará la siguiente entrada a su archivo .gitconfig en la raíz de su perfil de usuario.
[http] sslCAInfo = C:/Users/<yourname>/ca-bundle.crt
Lo hago así:
git init
git config --global http.sslVerify false
git clone https://myurl/myrepo.git
No soy un gran fanático de [EDIT: versiones originales de las] respuestas existentes, porque deshabilitar los controles de seguridad debería ser un último recurso, no la primera solución ofrecida. Aunque no puede confiar en los certificados autofirmados en el primer recibo sin algún método adicional de verificación, usar el certificado para las siguientes operaciones de git
al menos hace la vida mucho más difícil para los ataques que solo ocurren después de haber descargado el certificado. En otras palabras, si el certificado que descargó es genuino, estará bien a partir de ese momento. En cambio, si simplemente deshabilitas la verificación, estás abierto a cualquier tipo de ataque de hombre en el medio en cualquier momento .
Para dar un ejemplo específico: el famoso repositorio repo.or.cz
proporciona un certificado autofirmado . Puedo descargar ese archivo, colocarlo en algún lugar como /etc/ssl/certs
, y luego hacer:
# Initial clone
GIT_SSL_CAINFO=/etc/ssl/certs/rorcz_root_cert.pem /
git clone https://repo.or.cz/org-mode.git
# Ensure all future interactions with origin remote also work
cd org-mode
git config http.sslCAInfo /etc/ssl/certs/rorcz_root_cert.pem
Tenga en cuenta que usar la git config
local aquí (es decir, sin --global
) significa que este certificado autofirmado solo es de confianza para este repositorio en particular, lo cual es bueno. También es mejor que usar GIT_SSL_CAPATH
ya que elimina el riesgo de que git
realice la verificación a través de una Autoridad de Certificación diferente que podría estar comprometida.
Puede establecer GIT_SSL_NO_VERIFY
en true
:
GIT_SSL_NO_VERIFY=true git clone https://example.com/path/to/git
o, alternativamente, configure Git para no verificar la conexión en la línea de comando:
git -c http.sslVerify=false clone https://example.com/path/to/git
Tenga en cuenta que si no verifica los certificados SSL / TLS, entonces es susceptible a los ataques MitM .
Sigo encontrando este problema, así que escribí un script para descargar el certificado autofirmado del servidor e instalarlo en ~ / .gitcerts, luego actualizar git-config para que apunte a estos certificados. Se almacena en la configuración global, por lo que solo necesita ejecutarlo una vez por control remoto.
https://github.com/iwonbigbro/tools/blob/master/bin/git-remote-install-cert.sh
Tenga cuidado cuando use un forro usando sslKey o sslCert, como en la answer :
git clone -c http.sslCAPath="/path/to/selfCA" /
-c http.sslCAInfo="/path/to/selfCA/self-signed-certificate.crt" /
-c http.sslVerify=1 /
-c http.sslCert="/path/to/privatekey/myprivatecert.pem" /
-c http.sslCertPasswordProtected=0 /
https://mygit.server.com/projects/myproject.git myproject
Solo Git 2.14.x / 2.15 (Q3 2015) podría interpretar correctamente una ruta como ~username/mykey
(mientras que todavía puede interpretar una ruta absoluta como /path/to/privatekey
).
Ver commit 8d15496 (20 jul 2017) por Junio C Hamano ( gitster
) .
Ayudado por: Charles Bailey ( hashpling
) .
(Fusionado por Junio C Hamano - gitster
- in commit 17b1e1d , 11 de agosto de 2017)
http.c
:http.sslcert
yhttp.sslkey
sonhttp.sslkey
accesoAnteriormente, cuando se creó la ruta de acceso http_options () moderna para analizar varias opciones de http. * En 29508e1 ("Aislar la funcionalidad de solicitud HTTP compartida", 2005-11-18, Git 0.99.9k), y luego se corrigió la interación entre el múltiple archivos de configuración en 7059cd9 ("
http_init()
: arreglo del archivo de configuración de análisis", 2009-03-09, Git 1.6.3-rc0), analizamos variables de configuración comohttp.sslkey
,http.sslcert
como cadenas de vainillagit_config_pathname()
, porquegit_config_pathname()
que entiende que el prefijo "~[username]/
" no existía.Más tarde, convertimos algunos de ellos (a saber,
http.sslCAPath
yhttp.sslCAInfo
) para usar la función, y agregamos variables comohttp.cookeyFile
http.pinnedpubkey
para usar la función desde el principio. Debido a eso, todas estas variables comprenden el prefijo "~[username]/
".Haga que las dos variables restantes,
http.sslcert
yhttp.sslkey
, también conozcan la convención, ya que ambas son claramente rutas de acceso a los archivos.
Usando la versión de 64 bits de Git en Windows, solo agregue el certificado CA autofirmado en estos archivos:
- C: / Archivos de programa / Git / mingw64 / ssl / certs / ca-bundle.crt
- C: / Archivos de programa / Git / mingw64 / ssl / certs / ca-bundle.trust.crt
Si es solo un certificado autofirmado del servidor, agréguelo a
- C: / Archivos de programa / Git / mingw64 / ssl / cert.pem
Verifique la configuración de su antivirus y firewall.
De un día para otro, git ya no funcionaba. Con lo que se describe anteriormente, encontré que Kaspersky coloca un certificado raíz personal de antivirus autofirmado en el medio. No logré que Git aceptara ese certificado siguiendo las instrucciones anteriores. Me rendí a eso. Lo que me funciona es deshabilitar la función para escanear conexiones cifradas.
- Abre Kaspersky
- Configuración> Adicional> Red> No escanear conexiones cifradas
Después de esto, git funciona de nuevo con sslVerify habilitado.
Nota. Esto todavía no es satisfactorio para mí, porque me gustaría tener esa función de mi Anti-Virus activa. En la configuración avanzada, Kaspersky muestra una lista de sitios web que no funcionarán con esa función. Github no está listado como uno de ellos. Lo comprobaré en el foro de Kaspersky. Parece que hay algunos temas, por ejemplo, https://forum.kaspersky.com/index.php?/topic/395220-kis-interfering-with-git/&tab=comments#comment-2801211