Pregunta Cómo guardar un certificado SSL de servidor remoto localmente como un archivo


Necesito descargar un certificado SSL de un servidor remoto (no HTTPS, pero el protocolo de enlace SSL debe ser el mismo que el de Google Chrome / IE / wget y curl dar errores de comprobación de certificado) y agregar el certificado como confiable en mis computadoras portátiles Windows ' Tienda de certificados ya que no puedo hacer que mis chicos de TI me den el certificado de CA.

esto es para las comunicaciones de la oficina, así que realmente no puedo usar el cliente real para obtener el certificado.

Cómo hago esto, tengo Windows 7 y un montón de Linux a mano, así que cualquier herramienta / lenguaje de scripting está bien.


263


origen


Para obtener el certificado de un servidor de correo, ver security.stackexchange.com/questions/70528/... - That Brazilian Guy


Respuestas:


Si tiene acceso a OpenSSL, intente

openssl s_client -connect {HOSTNAME}:{PORT} -showcerts

reemplazando {HOSTNAME} y {PORT} con los valores que sean.


251



Prefiero esta opción ya que no tengo que abrir una GUI, y puedo hacerlo a través de SSH desde nuestros servidores. - bramp
Además, funciona para protocolos distintos de HTTP. - matt
la solución de elec3647 automatiza completamente la extracción del PEM en una tubería de shell. - phs
443 es el puerto predeterminado para HTTPS. - Flimm
lo necesitaba -servername opción para obtener el certificado de host virtual. gist.github.com/Artistan/5219484efb2fe51cd064175b3d0d5971 - Artistan


Un método rápido para obtener y descargar el certificado sería ejecutar el siguiente comando que canaliza la salida de -showcerts al comando x509 ssl que simplemente elimina todo lo que no funciona. Por ejemplo:

openssl s_client -showcerts -connect server.edu:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >mycertfile.pem

Para usar el certificado, con wget,

wget https:/server.edu:443/somepage --ca-certificate=mycertfile.pem

183



Intenté esto (en otro sitio web), pero se esperaba la cadena completa de certs: parece que esto solo trajo el primero en la cadena, ¿es de esperar? - monojohnny
Eso no funciona para mí: no se puede cargar el certificado 27262: error: 0906D06C: rutinas PEM: PEM_read_bio: sin línea de inicio: /SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/pem/pem_lib.c: 648: Esperando: CONFIANZA CERTIFICADO - Janusz
Estoy de acuerdo con monojohnny, esto no te da la cadena completa. - Michael Munsey
Tarde pero @monojohnny: openssl s_client -showcerts muestra todos los certs en la cadena recibida (si la conexión tiene éxito), pero a través de la tubería openssl x509 toma solo el primero y descarta el resto. Para obtener todos ellos en su lugar, use ...| sed -n '/^-----BEGIN CERT/,/^-----END CERT/p' o ...| awk '/^-----BEGIN CERT/,/^-----END CERT/' También puedes usar un poco más complicado awk poner cada certificado en un archivo separado que los hace más fáciles de usar con openssl y algunas otras herramientas. - dave_thompson_085
Para usar el certificado, con wget, wget https:/server.edu:443/somepage --ca-certificate=mycertfile.pem - MUY Belgium


Para ser sincero, nunca lo he intentado antes (nunca lo he necesitado), sin embargo, lo he probado en Firefox y parece funcionar para guardarlo:

  1. Haga clic en el icono del certificado SSL en la parte superior / Candado en la parte inferior.
  2. Hacer clic View Certificate
  3. Clickea en el Details Lengüeta
  4. Elija el certificado que desea de la jerarquía [no encerrado en una imagen]
  5. Hacer clic Export

alt text


111



Es bueno saberlo, pero, para mi curiosidad, ¿puede explicarme un poco más lo que está tratando de lograr? Nunca tuve la necesidad de exportar un certificado de cliente SSL y estoy muy curioso sobre por qué tendrías la necesidad de hacerlo ... - William Hilsum
Es un certificado de servidor, no un certificado de cliente. La razón principal para exportar un certificado y una clave privada del cliente es mantener una copia de seguridad, o si desea autenticarse usando otro navegador o computadora. - gbroiles
@gbroiles - leyó la pregunta, usó la terminología equivocada, pero esto resolvió su problema. - William Hilsum
a la derecha, y respondí a su pregunta: ¿por qué alguien querría guardar un certificado de cliente? "Certificado de cliente SSL" era su término, no el suyo. - gbroiles
No parece que haya una manera de hacer esto en Chrome, ¿verdad? - fatuhoku


Exportar un certificado usando el navegador Chrome

  1. Conéctese al sitio web usando SSL (https: // lo que sea)

2. Haga clic en el símbolo de bloqueo y luego haga clic en Detalles

  1. Desde Chrome versión 56, haces lo siguiente: ve al menú de tres puntos -> Más herramientas -> Herramientas del desarrollador, luego haz clic en la pestaña Seguridad. Esto te dará una Descripción general de seguridad con un Ver Certificado botón.

  2. Clickea en el Ver Certificado botón.

    Se abrirá una ventana modal. Tiene dos paneles. El superior muestra la jerarquía de confianza del certificado del sitio (el último enumerado), los certificados intermedios y el certificado raíz (el más alto).

    El segundo panel, más grande, muestra los detalles de uno de los certificados.

    Puede haber cero o más certificados intermedios.

    Tenga en cuenta que el certificado raíz tiene un icono con borde dorado. Los otros tienen un borde azul.

    Vea la captura de pantalla a continuación.

  3. Para exportar un certificado:

    1. Primero haga clic en el icono del certificado en la jerarquía de confianza.
    2. El certificado se mostrará en la parte principal del modal.
    3. Haga clic en el ícono grande del certificado en la parte principal del modal. Arrastrar el ícono en tu escritorio. Chrome luego copiará el certificado a su escritorio.

enter image description here


40



Tuve que arrastrar el icono a un editor de texto, el escritorio no funcionó para mí. - Cory Klein
Para Chrome en Windows, después de hacer clic en 'Ver certificado', el modal es diferente a Mac. Haga clic en la pestaña Detalles y luego en Copiar a archivo ... Luego elija el formato y el nombre de archivo, lo cual es sencillo. - PolyTekPatrick
Cuando uso Chrome v63 en Mac OS, el archivo de texto que obtengo al arrastrar el certificado es legible para el ser humano, pero no en ningún formato estructurado que pueda descifrar cómo convertir a formato legible por máquina como X.509 .crt. - Jim DeLaHunt
no hay diferencia si se abre desde la barra de direcciones o desde esta pestaña de desarrollo, y todavía no puede descargar crt ... - user25


Esto es respuesta de gbroiles, pero quería señalar que el proyecto cURL tiene una página con algunos detalles más en el uso openssl para guardar el certificado SSL del servidor remoto:

  • openssl s_client -connect {HOSTNAME}: {PORT} | archivo de registro de tee
  • Tipo QUIT y presione la tecla Enter / Return.
  • El certificado se enumerará entre los marcadores "BEGIN CERTIFICATE" y "END CERTIFICATE".
  • Si desea ver los datos en el certificado, puede usar:

    openssl x509 -inform PEM -in certfile -text -out certdata

    dónde certfile es el certificado extraído de logfile. Pase a ver certdata.


16





automatizado

-servername fue necesario para que obtuviera el certificado correcto del host virtual en nuestro servidor.

openssl s_client -showcerts -connect host.name.com:443 -servername host.name.com </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > host.name.com.pem

también puede convertir a un certificado de escritorio

openssl x509 -inform PEM -in host.name.com.pem -outform DER -out host.name.com.cer

La última parte es agregarlo a sus certs, no estoy seguro en Windows
para mac keychain que utilicé, debería ser similar ...

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain host.name.com.cer


4



gist.github.com/Artistan/5219484efb2fe51cd064175b3d0d5971 - Artistan


Esto dará los resultados que contienen solo los certificados

echo QUIT | \
openssl s_client -showcerts -connect hostname:port | \
awk '/-----BEGIN CERTIFICATE-----/ {p=1}; p; /-----END CERTIFICATE-----/ {p=0}' "

1