OpenSSL obtiene la longitud de la clave de todos los certificados [cerrado]

0

Estoy tratando de asegurar que todos los certificados en una cadena para un host tengan una longitud de clave de 2048 bits. Usando openssl s_client, solo se proporciona la longitud de la clave para el certificado de ese host, ¿hay una forma sencilla de enumerar la longitud de la clave para todos desde la línea de comandos o es necesario descargar todos los certificados y verificarlos manualmente?

    
pregunta Slicedpan 29.11.2013 - 11:34
fuente

1 respuesta

0

Si tiene un servidor de acceso público, use enlace . De lo contrario, vea a continuación un script.

No tengo conocimiento de una opción s_client que enumera el tamaño de clave para todos los certificados en una cadena. Podría usar la opción -showcerts para obtener todos los certificados proporcionados por el servidor y verificar cada uno de los certificados proporcionados y asumir que los certificados en su almacén de confianza no usan claves pequeñas.

Tenga en cuenta que algunos servidores pueden estar mal configurados para suministrar certificados en la cadena que no se utilizan (y son incorrectos). Recuerdo haber visto un sitio que se conectaría bien en Firefox, pero fallaría en Java. Resultó que se había incluido en la cadena una antigua CA caducada junto con los otros certificados. Firefox en este caso simplemente ignoraría ese certificado, ya que encontró una cadena de certificados válida. openssl s_client -showcerts imprime todos los certificados, incluso los que no están en uso (acabo de verificar que al agregar un certificado falso de 1024 bits a la cadena).

El siguiente script analiza openssl s_client -showcerts output:

#!/usr/bin/awk -f
# Match all certificates
/^-----BEGIN CERTIFICATE-----$/ { in_cert=1; }
in_cert { cert = cert $0 "\n"; }
/^-----END CERTIFICATE-----$/ { in_cert = 0; }
!in_cert && cert {
    infocmd="openssl x509 -text -noout | grep -E 'Public-Key:|Subject:'";
    print cert | infocmd;
    close(infocmd);
    cert="";
}
# Print the verification result
/Verify return code/

Luego use el bits.awk anterior con:

echo | openssl s_client -CApath /etc/ssl/certs \
    -connect example.com:443 -showcerts 2>/dev/null | ./bits.awk

La salida se ve como:

        Subject: CN=example.com
                Public-Key: (2048 bit)
        Subject: O=Trusted Certs Ltd., CN=Trusted CA
                Public-Key: (2048 bit)
        Subject: CN=Insecure
                Public-Key: (1024 bit)
    Verify return code: 0 (ok)

Las dos primeras líneas se utilizan realmente para la verificación de la cadena, la última no, pero el script no lo sabe.

    
respondido por el Lekensteyn 29.11.2013 - 19:28
fuente

Lea otras preguntas en las etiquetas