Cómo instalar certificados para la línea de comando

Cómo instalar certificados para la línea de comando

Entonces, en la escuela necesitamos instalar un certificado para acceder a los sitios https. En Firefox, puedo importar el certificado. Sin embargo, no puedo hacerlo con la línea de comando. Por ejemplo, corriendo git pushobtengo:

fatal: unable to access 'https://github.com/user/repo': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

¿Cómo importo un certificado para eliminar esto? La importación debe poder autenticarse por mí. Además, es un .cerarchivo, por lo que la respuesta .crtno funcionará. Además, no quiero seguir pasos sobre cómo configurar git, como ya los hice. Quiero saber si es posible hacer eso. ¿O puedo simplemente desactivar gittotalmente la autenticación con el comando y hacer que ignore certificados como este?la respuestaaquí dice? Además, no quiero que se cargue la página web, he configurado Firefox para que lo haga. Quiero que el git pushcomando proporcione una salida estándar como:

[master 630d087] message
 1 file changed, 93 insertions(+), 80 deletions(-)
 rewrite somefile (84%)
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 978 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
To https://github.com/User/Repo.git
   851ae39..630d087  master -> master

Nota: descubrí que es git config --global http.sslverify false. Pero me gustaría ver una respuesta para todo, no sólo un truco de git.

Respuesta1

TL;DR

Para que todo funcione y no solo su navegador, debe agregar ese certificado de CA al repositorio de CA confiable del sistema.

En ubuntu:

  • Vaya a /usr/local/share/ca-certificates/
  • Cree una nueva carpeta, es decir, "sudo mkdir school".
  • Copie el archivo .crt en la carpeta de la escuela.
  • Asegúrese de que los permisos estén bien (755 para la carpeta, 644 para el archivo)
  • Ejecute "sudo update-ca-certificates"

Por qué

Permítanme explicarles también lo que está pasando, para que los otros carteles vean por qué no necesitan ningún certificado para usar Github a través de HTTPS.

Lo que sucede allí es que su escuela está interceptando todas las comunicaciones SSL, probablemente para monitorearlas.

Para hacer eso, lo que hacen es en esencia un ataque de "hombre en el medio", y debido a eso, su navegador se queja con razón de que no puede verificar el certificado de github. El proxy de su escuela está obteniendo el certificado de github y, en su lugar, proporciona su propio certificado.

Cuando su navegador intenta verificar el certificado proporcionado por la escuela con la CA que firmó el certificado de github, falla con razón.

Entonces, para que la conexión SSL funcione en la escuela, debes aceptar conscientemente ese ataque "MITM". Y lo hace agregando el certificado CA de la escuela como uno confiable.

Cuando confía en esa CA de la escuela, su verificación del certificado de github falso funcionará, ya que la CA de la escuela verificará el certificado de github falso.

Tenga en cuenta que la conexión SSL ya no es segura ya que el administrador de su escuela podrá interceptar todas sus conexiones cifradas.

Respuesta2

El ca-certificatespaquete tiene las instrucciones en su README.Debian:

Si desea instalar autoridades de certificación locales en las que se confíe implícitamente, coloque los archivos de certificado como archivos únicos que terminen en .crty /usr/local/share/ca-certificates/vuelva a ejecutarlos update-ca-certificates.

Tenga en cuenta que menciona un directorio diferente de las otras respuestas aquí:

/usr/local/share/ca-certificates/

Después de copiar, /usr/local/share/ca-certificates/puede actualizar los permisos del certificado y ejecutarlo sudo update-ca-certificatescomo se menciona en la respuesta de Telegraphers. Verá en el resultado que se agregó el certificado.

Respuesta3

Las extensiones .crt, .pem y .cer son intercambiables, solo cambia la extensión del nombre del archivo, tienen la misma forma. Prueba esto:

$ sudo cp mycert.cer /usr/share/ca-certificates/mycert.pem
$ sudo dpkg-reconfigure ca-certificates
$ sudo update-ca-certificates
$ git config --global http.sslCAInfo /usr/share/ca-certificates/mycert.pem

Respuesta4

Utilizo la siguiente recopilación de respuestas anteriores:

sudo -i
echo | openssl s_client -showcerts -servername site.example.com -connect example.com:443 2>/dev/null | awk '/-----BEGIN CERTIFICATE-----/, /-----END CERTIFICATE-----/' >> /usr/local/share/ca-certificates/ca-certificates.crt 
update-ca-certificates

A menudo, ambos site.example.comy example.comson los mismos nombres de host.

información relacionada