¿Es posible crear un certificado de servidor de archivos pem a partir del resultado de openssl s_client -showcerts?

0

Sé que es posible listar certificados de servidor de un cliente a través de openssl s_client -showcerts .

Entonces, mi pregunta es, ¿es posible crear un certificado de servidor ssl válido a partir de esto sin necesidad de contactar al administrador del servidor?

Tengo el control de mi máquina cliente pero no del servidor, por lo que si puedo evitarlo, evitaría problemas. Creo que necesito un archivo .pem y necesito un certificado raíz ya que usar curl para acceder a los resultados del servidor en unable to get local issuer certificate .

Si no es posible hacerlo, se apreciaría una aplicación amable de por qué no es posible, ya que estoy un poco fuera de mi profundidad aquí. Me parece lógico que sea posible ya que el servidor ya ha proporcionado su certificado.

openssl s_client -showcerts también produce estos errores:

verify error:num=20:unable to get local issuer certificate
verify error:num=27:certificate not trusted
verify error:num=21:unable to verify the first certificate

Básicamente, me gustaría poder hacer que SSL confíe en el servidor al que me estoy conectando.

    
pregunta user55570 23.01.2016 - 21:29
fuente

1 respuesta

1

SI su curl fue creado para usar OpenSSL, como lo etiquetó pero que no es la única opción para curl , verifique con curl -V - Y el servidor está sirviendo correctamente cualquiera / todos los certificados intermedios, ENTONCES para confiar en el servidor curl-with-openssl necesita un "almacén de confianza" local que contenga el certificado raíz para la cadena de certificados del servidor (NO el propio certificado del servidor) en formato PEM. (Algunas otras implementaciones de SSL / TLS aceptarán anclajes que no sean root, pero las versiones anteriores de OpenSSL no pueden hacerlo en absoluto, e incluso 1.0.2 no lo hace de forma predeterminada).

MÉTODO 0: quizás ya esté allí. Los paquetes de curl a menudo incluyen un 'paquete' de raíces de CA de gran confianza como Symantec GoDaddy, etc., o un enlace a otro paquete que hace (normalmente llamado algo así como ca-bundle o trusted-cas). El formato (s) de los certificados en dicho paquete depende de la biblioteca (s) SSL / TLS que use; Compruebe curl -V como se indica arriba. Verifique si tiene un paquete de este tipo instalado, y si es así, si su curl lo está usando. Si no tiene o no puede obtener un paquete (incluido el caso en el que compila el enrollamiento) Y usa OpenSSL, enrutamiento ascendente tiene un paquete de raíces CA extraídas de Mozilla NSS / Firefox extraído en el formato PEM concatenado necesario para OpenSSL (y una herramienta para hacerlo usted mismo).

La línea de comando openssl no necesita usar las mismas ubicaciones de almacén de confianza predeterminadas que curl - e incluso si lo hace, hasta las versiones recientes, el comando s_client tenía un error que no usaba el almacén de confianza predeterminado correctamente. Si tiene un paquete PEM concatenado, especifíquelo en s_client con -CAfile bundlefile y vea si eso hace una diferencia.

Si el método 0 no se aplica, necesita obtener la raíz del servidor y agregarla a su almacén de confianza, o simplemente usarla como un almacén de confianza por sí mismo.

MÉTODO 1: obtenga del navegador. SI puede conectarse al servidor con un navegador como IE / Edge, Firefox, Chrome, etc. (esto requiere que haya una URL para ingresar que el servidor responderá con una página web exitosa), ENTONCES haga doble clic en el candado y haga clic en los botones o enlaces para mostrar el certificado chain (los exactos varían según el navegador). Seleccione el certificado más alto de la cadena y busque una opción para exportarlo, preferiblemente en formato PEM de certificado único (de nuevo, el método exacto varía según el navegador). Si no puede obtener el formato PEM de certificado único, comente el formato que recibió (indique la primera línea si parece -----BEGIN something ) y le diré cómo convertirlo.

Tome este archivo (cópielo en la máquina curl si lo creó en otro lugar) y agréguelo a su almacén de confianza (depende de su sistema de empaque; puede ser tan sencillo como concatenarlo con el archivo PEM concatenado existente) o especifíquelo por sí mismo a curl con la opción --cacert filename .

MÉTODO 2: s_client plus. Ejecuta openssl s_client -connect host:port -showcerts y captura (redirige o raspa) la salida. Tome el último bloque de líneas -----BEGIN CERTIFICATE----- a ----END CERTIFICATE----- y colóquelo en un archivo, por ejemplo, topcert . Si los nombres s: y i: (sujeto y emisor) que preceden a este bloque son exactamente iguales, esta es la certificación raíz y está todo listo. Use este archivo como se muestra arriba, pero solo si está satisfecho, esta CA es honesta y competente (aunque aparentemente no convenció a los fabricantes de navegadores si el método 1 no funcionó) porque está poniendo la seguridad de sus datos en sus manos .

Si el certificado superior del servidor no es una raíz, debe obtener su certificado padre , que debe ser la raíz. Alternativamente, en algunos casos, se trata de un certificado de 'puente' o 'transición' que vincula a una nueva CA con otra CA (más antigua), y también hay un certificado de hermanos para la nueva CA que es una raíz cert. Primero haga openssl x509 -in topcert -noout -text y busque debajo de x509v3 extensions , luego Authority Information Access para CA Issuers . Si está presente, el acceso a esta URL (o cualquiera de ellos) debe proporcionar el certificado principal. Esto suele ser en formato DER; Si es así, convierta con openssl x509 -in input -inform der -out output .

De lo contrario, mire las direcciones de OCSP, los puntos de distribución de CRL y los URL o nombres de dominio en las Políticas de certificado o el nombre del Emisor para los nombres de dominio utilizados por La CA y hurgue por allí para tratar de encontrar la raíz principal. De manera similar, busque en cualquier URL o nombre de dominio en Políticas o Nombre del sujeto y busque una raíz de hermanos. O busque en Google el nombre del Emisor y / o el nombre del Asunto. O publique el certificado aquí. O alguna combinación.

    
respondido por el dave_thompson_085 24.01.2016 - 07:07
fuente

Lea otras preguntas en las etiquetas