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

319

Necesito descargar un certificado SSL de un servidor remoto (no HTTPS, pero el protocolo de enlace SSL debe ser el mismo que Google Chrome / IE / wget y curl todos dan errores de verificació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 comunicaciones de 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, por lo que cualquier herramienta / lenguaje de script está bien.

Kimvais
fuente
Para obtener el certificado de un servidor de correo , visite security.stackexchange.com/questions/70528/…
Ese tipo brasileño
Lo más probable es que su navegador tenga una función incorporada para esto, tal vez en "herramientas de desarrollador".
nobar

Respuestas:

316

Si tiene acceso a OpenSSL, intente

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

reemplazando {HOSTNAME} y {PORT} con cualquiera de sus valores.

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

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 extraño. 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
elec3647
fuente
55
Intenté esto (en otro sitio web), pero se esperaba la cadena completa de certs: parece que esto solo trajo el primero de la cadena, ¿es eso de esperar?
monojohnny
8
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
44
Estoy de acuerdo con monojohnny, esto no te da la cadena completa.
Michael Munsey
44
Tarde pero @monojohnny: openssl s_client -showcertsmuestra todos los certificados en la cadena recibida (si la conexión se realiza correctamente), pero la conexión openssl x509solo toma la primera y descarta el resto. Para obtener todos ellos, use ...| sed -n '/^-----BEGIN CERT/,/^-----END CERT/p'o ...| awk '/^-----BEGIN CERT/,/^-----END CERT/'también puede usar un poco más complicado awkpara poner cada certificado en un archivo separado que los hace más fáciles de usar openssly algunas otras herramientas.
dave_thompson_085
3
usando wget parece que solo se guarda a index.html=>HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: ‘index.html.1’
OZZIE
126

Para ser honesto, nunca he intentado esto antes (nunca lo he necesitado), sin embargo, acabo de intentarlo en Firefox y parece funcionar para guardar:

  1. Haga clic en el icono del certificado SSL en la parte superior / Candado en la parte inferior.
  2. Hacer clic View Certificate
  3. Haga clic en la Detailspestaña
  4. Elija qué certificado desea de la jerarquía [no marcado en un círculo en la imagen]
  5. Hacer clic Export

texto alternativo

William Hilsum
fuente
Es bueno saberlo, pero para mi curiosidad, ¿puede explicarme un poco más lo que está tratando de lograr? Nunca he necesitado exportar un certificado de cliente SSL y tengo mucha curiosidad por qué realmente tendrías la necesidad de hacerlo ...
William Hilsum
1
Eso es un certificado de servidor, no un certificado de cliente. La razón principal para exportar una clave privada y un certificado del cliente es mantener una copia de seguridad, o si desea autenticarse utilizando otro navegador o computadora.
gbroiles
@gbroiles: lea la pregunta, utilizó la terminología incorrecta, pero esto resolvió su problema.
William Hilsum
1
bien, y respondí tu pregunta: ¿por qué alguien querría guardar un certificado de cliente? "Certificado de cliente SSL" era su término, no el suyo.
gbroiles
1
No parece que haya una manera de hacer esto en Chrome, ¿verdad?
fatuhoku
50

Exportar un certificado usando el navegador Chrome

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

2. Haga clic en el símbolo del candado y luego haga clic en Detalles

  1. Desde Chrome versión 56, usted hace lo siguiente: vaya al menú Tres puntos -> Más herramientas -> Herramientas para desarrolladores, luego haga clic en la pestaña Seguridad. Esto le dará una Descripción general de seguridad con un botón Ver certificado .

  2. Haga clic en el botón Ver certificado .

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

    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. Arrastre el icono a su escritorio. Chrome luego copiará el certificado a su escritorio.

ingrese la descripción de la imagen aquí

Larry K
fuente
1
Tuve que arrastrar el icono a un editor de texto, el escritorio no me funcionó.
Cory Klein
2
Para Chrome en Windows, después de hacer clic en 'Ver certificado', el modal es diferente de Mac. Haga clic en la pestaña Detalles y luego Copiar a archivo ... Luego elija el formato y el nombre de archivo, que es sencillo.
PolyTekPatrick
1
Cuando uso Chrome v63 en Mac OS, el archivo de texto que obtengo al arrastrar el certificado es legible por humanos, pero no en ningún formato estructurado que pueda descubrir cómo convertirlo en 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 aún no puede descargar crt ...
user25
1
Ya no funciona en Chrome 72.0.3626.121
A. D'Alfonso
20

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

  • openssl s_client -connect {HOSTNAME}: {PORT} | archivo de registro de tee
  • Escriba QUITy presione la tecla Entrar / Volver.
  • El certificado aparecerá entre los marcadores "INICIAR CERTIFICADO" y "FINALIZAR CERTIFICADO".
  • Si desea ver los datos en el certificado, puede usar:

    openssl x509 -informar PEM -en certfile -text -out certdata

    de donde certfilese extrae el certificado logfile. Busque en certdata.

Daniel Trebbien
fuente
Esto funcionó para mí. Para ser un poco más explícito, edité el archivo de registro y recorté todo lo que estaba fuera del BEGIN CERTIFICATE y END CERTIFICATE y guardé el resultado como certfile.pem (No estoy seguro si la extensión era necesaria).
Michael Welch
16

automatizado

-servername fue requerido para obtener 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 para escritorio

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

La última parte es agregarlo a sus certificados, no estoy seguro en Windows
para Mac. El llavero que utilicé debería ser similar ...

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

Artistan
fuente
Tenga en cuenta que algunas aplicaciones tienen problemas con los llaveros System y SystemRoot (Golang, lo estoy mirando a USTED), por lo que después de instalar y configurar la confianza para esos niveles, también puede copiarlo a su propio usuario a login.keychaintravés de la Keychain Accessaplicación, usted puede simplemente buscar el certificado en System / SystemRoot y hacer clic y arrastrarlo a su loginllavero.
dragon788
1
@ dragon788: mi intención era automatizar esto con la línea de comando y esto funciona para mí. ¡Comparta aquí si encuentra una solución para login.keychain a través de CLI también! ¡Gracias!
Artistan
a juzgar por lo que he leído en la web, creo que solo omitir -del comando se aplicará solo al llavero del usuario en lugar del llavero del sistema.
dragon788
Si también está agregando uno o varios certificados intermedios, deseará usarlos en trustAsRootlugar de trustRootpara que se agreguen correctamente.
dragon788
2

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}' "
Arquímedes Trajano
fuente
0

Encontré una manera mucho más fácil si en Windows. Intenté con Microsoft Edge (pre-chromium) e hice clic en el candado en la barra de direcciones -> Ver cuadro de diálogo de certificado aparece con un botón "Exportar a archivo", que lo guarda como un archivo .crt.

No usaría mucho Edge, pero fue pan comido.

Dale Wilbanks
fuente