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 allí 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
git
version-control
https
self-signed
Ian Vink
fuente
fuente
sslcainfo
opción. si puede usarcurl --cacert
con éxito para extraer su ruta de repositorio pero git no funciona, debe agregar el certificado al misterioso programa OSX Keychain. más aquí superuser.com/questions/605900/...Respuestas:
Para aceptar permanentemente un certificado específico
Prueba
http.sslCAPath
ohttp.sslCAInfo
. La respuesta de Adam Spires da algunos buenos 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
-c
agit
con la variable de configuración adecuada, o use la respuesta de Flow :Para deshabilitar la verificación SSL para un repositorio específico
Si el repositorio está completamente bajo su control, puede intentar:
Hay bastantes opciones de configuración SSL en
git
. De la página del manual degit config
:Algunas otras opciones de configuración SSL útiles:
fuente
git -c http.sslVerify=false clone https://domain.com/path/to/git
resolvió mi problema, gracias ...Puedes configurarlo
GIT_SSL_NO_VERIFY
paratrue
:o, alternativamente, configure Git para que no verifique la conexión en la línea de comando:
Tenga en cuenta que si no verifica los certificados SSL / TLS, entonces es susceptible a los ataques MitM .
fuente
-c
indicador activadogit
para modificar un valor de configuración para un solo comando. Sin embargo, creo que esta sintaxis es más limpia.-c
en git. De hecho, creo que es la solución más limpia en lugar de contaminar el medio ambiente. :)git -c http.sslVerify=false <gitSubCommand>
también puede funcionar a través de intermediarios.No soy un gran fanático de [EDITAR: versiones originales de las] respuestas existentes, porque deshabilitar las comprobaciones de seguridad debería ser el ú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, el uso del certificado para
git
operaciones posteriores 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 descargaste es genuino, entonces eres bueno a partir de ese momento. Por el contrario, si simplemente deshabilita la verificación, está abierto a cualquier tipo de ataque de hombre en el medio en cualquier momento .Para dar un ejemplo específico: el famoso
repo.or.cz
repositorio proporciona un certificado autofirmado . Puedo descargar ese archivo, colocarlo en algún lugar como/etc/ssl/certs
, y luego hacer:Tenga en cuenta que el uso local
git config
aquí (es decir, sin--global
) significa que este certificado autofirmado solo es confiable para este repositorio en particular, lo cual es bueno. También es más agradable que usar,GIT_SSL_CAPATH
ya que elimina el riesgo degit
hacer la verificación a través de una Autoridad de certificación diferente que podría verse comprometida.fuente
/etc/ssl/certs/
directorio y resolvería eficientemente todo lo que necesita. No he probado esto, eso sí, pero podría permitirte usar un--global
montón de certs. Vale la pena probar, sin embargo.git config http.validCertFingerprint <base64-encoded-hash-of-certifcate>
git clone --config http.sslCAInfo=<path_to_cert> https://repo.or.cz/org-mode.git
(No es necesario llamar a un comando 'git config' después).Configuración de certificado autofirmado de Git
tl; dr
Las claves de configuración que busca son:
http.sslverify
- Siempre cierto. Ver nota anterior.Estos son para configurar certificados de host en los que confía
http.sslCAPath
http.sslCAInfo
Estos son para configurar SU certificado para responder a los desafíos de SSL.
http.sslCert
http.sslCertPasswordProtected
Aplicar selectivamente la configuración anterior a hosts específicos.
http.<url>.*
Global
.gitconfig
para autoridades de certificación autofirmadasPor mi bien y el de mis colegas, aquí es cómo logramos que funcionen los certificados autofirmados sin desactivar
sslVerify
. Edite su.gitconfig
para usargit config --global -e
agregar estos:Referencias
Especifique config cuando
git clone
-ingSi necesita aplicarlo por repositorio, la documentación le indica que simplemente ejecute
git config --local
en su directorio de repositorio. Bueno, eso no es útil cuando todavía no ha clonado el repositorio localmente, ¿verdad?Puedes hacer el
global -> local
hokey-pokey configurando su configuración global como se indica arriba y luego copiar esa configuración a su configuración de repositorio local una vez que clona ...O lo que puede hacer es especificar los comandos de configuración
git clone
que se aplican al repositorio de destino una vez que se clona.Un trazador de líneas
EDITAR: Vea la respuesta de VonC que señala una advertencia sobre las rutas absolutas y relativas para versiones específicas de git desde 2.14.x / 2.15 a este único trazador de líneas
CentOS
unable to load client key
Si está intentando esto en CentOS y su
.pem
archivo le está dandoEntonces querrá esta respuesta de StackOverflow sobre cómo
curl
usa NSS en lugar de Open SSL.Y te gustaría querer reconstruir
curl
desde la fuente :reiniciar 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 de CA Root personalizado a la Tienda de CA utilizada por pip en Windows?
fuente
http.sslCAPath
. En mi caso, tuve que usarhttp.sslCAInfo
para especificar el archivo específico. Hacerlo permitió que Git se conectara a nuestro GitHub privado sin desactivar la validación SSL.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. Está almacenado 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
fuente
Esta respuesta está extraída de este artículo escrito por Michael Kauffman.
Use Git para Windows con un certificado SSL corporativo
Problema :
Si tiene un certificado SSL corporativo y desea clonar su repositorio desde la consola o VSCode, obtendrá el siguiente error:
fatal: no se puede acceder a ' https: // myserver / tfs / DefaultCollection / _git / Proj / ': problema con el certificado SSL: no se puede obtener el certificado del emisor local
Solución :
Exporte el certificado autofirmado raíz a un archivo. Puede hacerlo desde su navegador.
Busque el archivo "ca-bundle.crt" en su carpeta git (versión actual C: \ Archivos de programa \ Git \ usr \ ssl \ certs pero ha cambiado en el pasado). Copie el archivo a su 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
fuente
Para deshabilitar la verificación SSL para un repositorio específico Si el repositorio está completamente bajo su control, puede intentar:
fuente
Tenga cuidado cuando esté usando un revestimiento usando sslKey o sslCert, como en la respuesta de Josh Peak :
Solo Git 2.14.x / 2.15 (Q3 2015) podría interpretar una ruta como
~username/mykey
correctamente (mientras que todavía puede interpretar una ruta absoluta como/path/to/privatekey
).Ver commit 8d15496 (20 de julio de 2017) por Junio C Hamano (
gitster
) .Ayudado por: Charles Bailey (
hashpling
) .(Fusión por Junio C Hamano -
gitster
- en commit 17b1e1d , 11 ago 2017)fuente
Usando la versión de 64 bits de Git en Windows, solo agregue el certificado CA autofirmado en estos archivos:
Si es solo un certificado autofirmado del servidor, agréguelo a
fuente
Verifique la configuración de su antivirus y firewall.
De un día para otro, git ya no funcionaba. Con lo que se describió anteriormente, descubrí que Kaspersky coloca un certificado raíz personal de antivirus autofirmado en el medio. No logré dejar que Git aceptara ese certificado siguiendo las instrucciones anteriores. Me di por vencido con eso. Lo que funciona para mí es desactivar la función para escanear conexiones cifradas.
Después de esto, git funciona nuevamente con sslVerify habilitado.
Nota. Esto todavía no me satisface, porque me gustaría tener activada esa característica de mi antivirus. En la configuración avanzada, Kaspersky muestra una lista de sitios web que no funcionarán con esa función. Github no figura 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
fuente
En el .gitconfig archivo puede agregar el valor dado a continuación para que aceptable
sslCAInfo = /home/XXXX/abc.crt
fuente
Lo hago así:
fuente
--global
! Se muestran muchos tutoriales,--global
pero es una muy mala idea en general yhttp.sslVerify
en particular. Tan pronto como tenga más de un clon de diferentes proyectos, compañías y equipos en la computadora, puede tener problemas rápidamente. Por ejemplo, la identificación de usuario y los correos electrónicos que se filtran de un proyecto a otro pueden ser bastante embarazosos. Y usar--global
onhttp.sslVerify
puede abrirlo a todo tipo de problemas de seguridad. Por lo tanto: no lo use--global
, a menos que sea plenamente consciente de los efectos secundarios y esté preparado para correr el riesgo.En Windows esto funcionó para mí:
Agregue el contenido de su certificado autofirmado al final del archivo ca-bundle . Incluyendo el ----- COMENZAR CERTIFICADO ----- y ----- FINALIZAR CERTIFICADO ----- líneas
La ubicación del archivo ca-bundle suele ser C: \ Archivos de programa \ Git \ mingw64 \ ssl \ certs
Luego, agregue la ruta del paquete ca archivo a la configuración global de git. El siguiente comando hace el truco:
git config --global http.sslCAInfo "C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt"
Observación: ¡La ruta depende de su ruta local del archivo ca-bundle!
fuente
Yo uso una máquina Windows y este artículo me ayudó. Básicamente abrí ca-bundle.crt en el bloc de notas y agregué certificados de cadena en él (todos ellos). Este problema generalmente ocurre para las redes de la compañía donde tenemos intermediarios sentados entre el sistema y el repositorio de git. Necesitamos exportar todos los certificados en la cadena de certificados, excepto el certificado de hoja en formato base 64 y agregarlos a ca-bundle.crt y luego configurar git para este archivo crt modificado.
fuente
No es una buena práctica establecer http.sslVerify falso. En cambio, podemos usar el certificado SSL.
Por lo tanto, el agente de compilación usará https con certificado SSL y PAT para la autenticación.
Copie el contenido del archivo cer incluyendo –begin — y –end--.
git bash on build agent => git config –global http.sslcainfo "C: / Archivos de programa / Git / mingw64 / ssl / certs / ca-bundle.crt" Vaya a este archivo y agregue el contenido .cer.
Por lo tanto, el agente de compilación puede acceder al certificado SSL
fuente
Mi respuesta puede llegar tarde pero funcionó para mí. Puede ayudar a alguien.
Intenté los pasos mencionados anteriormente y eso no resolvió el problema.
prueba esto
git config --global http.sslVerify false
fuente