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

72

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, al ejecutar 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 pasos sobre cómo configurar git, como ya lo he hecho. Quiero saber si es posible hacer eso. ¿O simplemente puedo desactivar la autenticación con el gitcomando totalmente y hacer que ignore los certificados como dice la respuesta aquí? Además, no quiero que se cargue la página web, he configurado firefox para que lo haga. Quiero que el git pushcomando dé la 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 solo un truco git

Electricidad universal
fuente
2
posible duplicado de ¿Cómo instalo un certificado raíz?
Eric Carvalho
@EricCarvalho no, eso es todo .crt. Necesito.cer
Universal Electricity
¿Tienes algún problema con tu comando git o con lo que quieres hacer? Dame un ping con @AB
AB
@AB Quiero permitir que git use el certificado que la escuela nos da, en lugar de tratar de usar el certificado github. O si eso no funciona, entonces permita que el certificado de la escuela se autentique para mí
Universal Electricity
Tenga en cuenta que las extensiones .crt y .cer son intercambiables, solo cambie la extensión del nombre del archivo, tienen la misma forma.
Mike

Respuestas:

118

TL; DR

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

En ubuntu:

  • Vaya a / usr / local / share / ca-certificados /
  • 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-certificados"

Por qué

Permítanme explicar lo que está sucediendo también, para que los otros carteles vean por qué no necesitan ningún certificado para usar Github sobre HTTPS.

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

Para hacer eso, lo que hacen es esencialmente un ataque de "hombre en el medio", y debido a eso, su navegador se queja legítimamente de que no puede verificar el certificado de github. El representante de su escuela está sacando el certificado de github y, en su lugar, está proporcionando su propio certificado.

Cuando su navegador intenta verificar el certificado proporcionado por la escuela contra el CA que firmó el certificado de github, falla legítimamente.

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

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

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.

Telegrafista
fuente
Esta es esencialmente la misma respuesta que Mike sin la reconfiguración dpkg que no debería ser necesaria. Lo que puede estar sucediendo es que git u otra línea de comando no está siendo 100% estándar con respecto a su verificación SSL. Puede ser necesario usar lo que usted llama "git hack" para solucionar el "hack SSL" que su escuela implementó primero.
Telegrapher
Y también, tenga en cuenta que necesita permisos de root para ejecutar estos comandos, por lo que el comando sudo debe ser exitoso o no podrá actualizar las autoridades de certificación del sistema.
Telegrapher
2
Por favor, editar su respuesta para proporcionar los datos adicionales - no deje el en un comentario.
guntbert
1
Creo que debería ser /usr/local/share/ca-certificates/. Vea man update-ca-certificates, que habla de que hay una lista blanca /usr/share/ca-certificates/pero de cómo implícitamente confía en todo en el /usr/local/share/ca-certificates/directorio.
Ian Hickson
3
en Ubuntu 16.04 después de agregar la CA /usr/local/share/ca-certificates, tuve que usarla sudo dpkg-reconfigure ca-certificatespara recoger la CA.
Matt L.
41

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

Si desea instalar autoridades de certificación locales para que sean confiables implícitamente, coloque los archivos de certificado como archivos individuales que terminan .crten /usr/local/share/ca-certificates/y vuelva a ejecutar update-ca-certificates.

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

/usr/local/share/ca-certificates/

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

Robert Siemer
fuente
44
Esto funcionó para mí también en Ubuntu 16.04. El camino en la respuesta aceptada no funcionó para mí.
Plazgoth
Esto tiene que ser una respuesta aceptada, esta es una solución de trabajo para el servidor ubuntu 16.04 LTS.
Lasitha Benaragama
15

Las extensiones .crt, .pem y .cer son intercambiables, solo cambie 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
Miguel
fuente
Bueno, aunque esto es cierto, no ayudó. Pero en el futuro podría ayudar a las personas
Universal Electricity
Agregué una línea más, intente hacer que git confíe en su certificado, tenga en cuenta que cambié cer. a .pem en dos de los 4 pasos en su lugar .crt. @Unicorns Are Very Very Yummy
Mike
3
Si su archivo .CER es binario (formato DER), entonces no puede simplemente cambiar la extensión. Use openssl(1)para convertir el certificado al formato PEM. Ejecutar:$ openssl -in mycert.cer -inform DER -out mycert.pem -outform PEM
Usuario de Arch
1
@Archuser Tal vez el comando correcto es este:openssl x509 -inform DER -in certificate.cer -out certificate.pem
artificerpi
5

Utilizo la siguiente compilació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

Se puede modificar para ser de una sola línea.

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

Orientar
fuente
3

Leí todas las soluciones y las resolví así;

sudo openssl x509 -inform DER -in certificate.cer -out certificate.crt

sudo mv certificate.crt /usr/share/ca-certificate/

cd /usr/share/ca-certificate

sudo chmod 644 certificate.crt

sudo dpkg-reconfigure ca-certificates

sudo update-ca-certificates
Kadir Y.
fuente
1

Tenía un problema similar en el que la instalación del certificado en Firefox y Google Chrome funcionaba, pero la actualización en el terminal sudo apt-get updateno funcionaba y daba 403 errores de IP prohibidos. Yo también estaba teniendo un archivo sample.cer. Básicamente, primero tengo que convertirlo a .crt.

sudo openssl x509 -inform DER -in sample.cer -out sample.crt

Aún así, sudo dpkg-reconfigure ca-certificatesno pude encontrar el certificado requerido. El problema conmigo es que estaba copiando el certificado en el lugar equivocado.

En lugar de copiarlo en, $/usr/share/ca-certificates lo estaba copiando en $/usr/local/share/ca-certificates Pero al colocarlo en el lugar correcto resolvió mi problema. Pero todavía no puedo actualizar los paquetes o instalar nuevos paquetes.

Solución rápida (para mí):

Uso de ftp en lugar de http

sudo sed -i s/http/ftp/ /etc/apt/sources.list && apt-get update

y el comando anterior funcionó. Haga una copia del archivo sources.list antes de realizar los cambios.

Si algo no está claro o no es correcto, corrígeme.

Gopal Sharma
fuente
0

Para acceder a un sitio web con https, ya sea que esté utilizando un navegador CLI o GUI, no necesita su certificado escolar.

Para usar a gittravés de http (s), debe registrar su clave pública en la configuración de su perfil en GitHub .

Más información aquí . Cambia tu perfil de GitHub aquí .


Prueba esto:

sudo apt-get install w3m
w3m https://github.com/

... funciona sin un certificado adicional.

AB
fuente