
Herramienta de código abierto para ayudarte a construir una cadena de certificados SSL válida.
Descripción • Cómo usar • Parámetros • Cómo funciona • Requisitos • Otros • Licencia
Es una herramienta de código abierto para ayudarte a construir una cadena de certificados SSL válida. También puede ayudarte a corregir la cadena incompleta y descargar todos los certificados CA faltantes. También puedes descargar todos los certificados de un servidor remoto y obtener tu cadena de certificados correcta.
Es simple:
# Clone this repository
git clone https://github.com/trimstray/mkchain
# Go into the repository
cd mkchain
# Install
./setup.sh install
# Run the app
mkchain -i /data/certs -o /data/chain.crt
- el enlace simbólico a
bin/mkchainse coloca en/usr/local/bin- la página del manual se coloca en
/usr/local/man/man8
Proporciona las siguientes opciones:
Usage:
mkchain <option|long-option>
Examples:
mkchain --in Root.crt --in Intermediate1.crt --in Server.crt --out bundle_chain_certs.crt
mkchain --in /tmp/certs --out bundle_chain_certs.crt --with-root
mkchain -i Server.crt -o bundle_chain_certs.crt
mkchain -i https://incomplete-chain.badssl.com/ --with-root
Options:
--help show this message
--debug displays information on the screen (debug mode)
-i, --in add certificates to merge (file, multiple files, directory with ssl certificates
or remote domain)
-o, --out saves the result (chain) to a file
--with-root add root certificate to certificates chain
-o|--out- sin este parámetro,mkchainguarda la cadena de salida en el directoriomkchain/chains/.
Antes de leerlo, consulta el artículo sobre Cadena de Certificados SSL.
Comencemos con la cadena de certificados de ssllabs. Se entregan junto con mkchain y se pueden encontrar en el directorio example/ssllabs.com que además contiene el directorio all (que contiene todos los certificados necesarios para ensamblar la cadena) y el directorio server_certificate (que contiene solo el certificado del servidor).
La cadena correcta para el dominio ssllabs.com (resultado del comando openssl):
Certificate chain
0 s:/C=US/ST=California/L=Redwood City/O=Qualys, Inc./CN=ssllabs.com
i:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2012 Entrust, Inc. - for authorized use only/CN=Entrust Certification Authority - L1K
1 s:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2012 Entrust, Inc. - for authorized use only/CN=Entrust Certification Authority - L1K
i:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2009 Entrust, Inc. - for authorized use only/CN=Entrust Root Certification Authority - G2
2 s:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2009 Entrust, Inc. - for authorized use only/CN=Entrust Root Certification Authority - G2
i:/C=US/O=Entrust, Inc./OU=www.entrust.net/CPS is incorporated by reference/OU=(c) 2006 Entrust, Inc./CN=Entrust Root Certification Authority
El código anterior presenta una cadena completa que consiste en:
Certificado de identidad (Certificado de servidor)
emitido para ssllabs.com por Entrust Certification Authority - L1K
Certificado intermedio
emitido para Entrust Certification Authority - L1K por Entrust Root Certification Authority - G2
Certificado intermedio
emitido para Entrust Root Certification Authority - G2 por Entrust Root Certification Authority
Certificado raíz (Certificado autofirmado)
emitido para Entrust Root Certification Authority por Entrust Root Certification Authority
En este escenario, encadenaremos todos los certificados entregados. Ejemplo de ejecución de la herramienta:
En este escenario, solo usamos el certificado del servidor y lo utilizamos para recuperar los certificados restantes necesarios. Luego, como antes, combinaremos todos los certificados proporcionados. Ejemplo de ejecución de la herramienta:
Para crear una cadena válida, debes proporcionar a la herramienta todos los certificados necesarios (si estableces un directorio para el parámetro -i|--in). Serán:
Esto es muy importante porque sin ellos no podrás determinar el inicio y el final de la cadena.
Si solo estableces un archivo de certificado como valor para
-i|--in,mkchaindescarga automáticamente todos los certificados necesarios.
Sin embargo, si observas dentro de la cadena generada después de generar con mkchain, no encontrarás el certificado raíz allí.
¿Por qué? Porque los certificados raíz autofirmados no necesitan/deben incluirse en la configuración del servidor web. No sirven para nada (los clientes siempre los ignorarán) e incurren en una ligera penalización de rendimiento (latencia) porque aumentan el tamaño del handshake SSL.
Si deseas agregar un certificado raíz a la cadena de certificados, ejecuta la utilidad con el parámetro --with-root.
mkchain permite usar dos rutas de certificación:
Al generar la cadena de certificados, mkchain muestra comentarios con información sobre los certificados, incluidos posibles errores.
Aquí tienes una lista de todas las posibilidades:
El mensaje se muestra en ausencia de un certificado de servidor que sea el inicio de la cadena. Este es un caso único porque en esta situación mkchain finaliza su operación mostrando solo esta información. El certificado del servidor es el único certificado necesario para crear correctamente una cadena. Sin este certificado, no se creará la cadena correcta.
La situación inversa aquí: mensaje mostrado cuando se encuentra un certificado de servidor válido.
Este mensaje aparece cuando no se encuentra el primero de los dos certificados intermedios. Esta información no especifica explícitamente la ausencia de un segundo certificado intermedio y, por otro lado, permite determinar si existe el certificado intermedio al que se firmó el certificado del servidor. Además, puede mostrarse si se ha entregado el segundo certificado intermedio.
Similar al anterior, pero se refiere al segundo certificado intermedio. Sin embargo, es posible crear la cadena correctamente utilizando la segunda ruta de certificación, por ejemplo, usando el primer certificado intermedio y reemplazando el segundo por el certificado principal.
Este mensaje significa que falta uno o todos los certificados intermedios necesarios y se muestra en ausencia del certificado raíz.
Este mensaje indica la cantidad de certificados intermedios válidos.
La falta del certificado raíz se trata como una advertencia. Por supuesto, al configurar certificados en el lado del servidor, no se recomienda adjuntar un certificado raíz, pero si lo creas con mkchain, trata la cadena como incompleta mostrando información sobre la creación incorrecta de la cadena.
Este mensaje no informa sobre el error ni sobre la falta del campo CN, lo que puede ocurrir con algunos certificados (consulta example/google.com). El campo Common Name identifica el nombre de host asociado con el certificado. No hay requisito en RFC3280 de que un DN emisor tenga un CN. La mayoría de las CA incluyen un CN en el DN emisor, pero algunas no, como esta CA de Equifax.
mkchain utiliza utilidades externas que deben instalarse antes de ejecutarlo:
Esta herramienta funciona con:
MacOS/FreeBSD:
pkg install getopt)greadlink de coreutils (instalado mediante homebrew)Véase este.
Véase este.
GPLv3 : http://www.gnu.org/licenses/
Software libre, ¡Sí!