Descubra cuántos navegadores rechazan el certificado SSL

11

Me gustaría saber cuántos navegadores rechazan nuestro certificado SSL al realizar solicitudes HTTP a nuestro servidor web. Estamos utilizando una CA gratuita que ahora parece ser reconocida por la mayoría de los navegadores modernos, pero me gustaría obtener algunos números sin probar exhaustivamente las combinaciones de navegadores y sistemas operativos.

Entiendo que el navegador termina la conexión cuando falla la verificación del certificado, entonces, ¿hay alguna forma de que Apache detecte esto? No espero obtener información de diagnóstico específica, solo el hecho de que hubo un problema de certificado / SSL es suficiente.

Mate
fuente
1
Dudo que sea posible hacer esto con Apache, probablemente mucho más fácil de hacer poniendo algo como HAProxy frente a Apache.
Florin Asăvoaie
El protocolo SSL tiene un campo de código de error, que la parte que termina la conexión puede usar para decirle al otro extremo, por qué se terminó la conexión. No sé cuán específica es la información en ese campo, o si incluso es aplicable a este caso específico. Seguiré esta pregunta, ya que la respuesta también puede ser útil para mí.
kasperd

Respuestas:

3

El protocolo SSL tiene un código de alerta para cuando la CA es desconocida ... supongo que podría detectarlo usando algo como tshark.

pero más útil es saber cómo evitar el problema. En Apache, asegúrese de tener las siguientes TRES directivas:

SSLCertificateFile /etc/pki/tls/certs/myserver.cert
SSLCertificateKeyFile /etc/pki/tls/private/myserver.key
SSLCertificateChainFile /etc/pki/tls/certs/myserver.ca-bundle

Las extensiones dadas a los nombres de archivo realmente no le importan a Apache. En este caso, el SSLCertificateFile será un solo certificado X.509 con el Asunto del servidor, y el SSLCertificateChainFile será una concatenación de certificados CA intermedios y raíz (comenzando con la raíz primero).

Aquí hay un script útil para ayudar a explorar las cadenas de certificados en la codificación PEM.

#!/bin/bash
#
# For an input of concatenated PEM ("rfc style") certificates, and a
# command-line consisting of a command to run, run the command over each PEM
# certificate in the file. Typically the command would be something like
# 'openssl x509 -subject -issuer'.
#
# Example:
#
#    ssl-rfc-xargs openssl x509 -subject -issuer -validity -modulus -noout < mynewcert.pem
#
sed -e 's/^[ \t]*<ds:X509Certificate>\(.*\)$/-----BEGIN CERTIFICATE-----\n\1/' \
    -e 's/^[ \t]*<\/ds:X509Certificate>[ \t]*$/-----END CERTIFICATE-----\n/' \
    -e 's/^\(.*\)<\/ds:X509Certificate>[ \t]*$/\1\n-----END CERTIFICATE-----\n/' \
| gawk -vcommand="$*" '
    /^-----BEGIN /,/^-----END / {
        print |& command
    }
    /^-----END / {
        while ((command |& getline results) > 0) {
             print results
        }
        close(command)
    }
    '

(este script en particular también se usa para una aplicación XML en particular, que es lo que los bits sed cerca del inicio deben soportar; los bits interesantes son hechos por gawk).

Aquí hay un ejemplo de cómo puede usarlo (por ejemplo, para determinar que los certificados en el paquete CA están en el orden correcto, a veces esto es importante)

$ openssl s_client -connect google.com:443 -showcerts </dev/null 2>&1 | ssl-rfc-xargs openssl x509 -subject -issuer -noout
subject= /C=US/ST=California/L=Mountain View/O=Google Inc/CN=google.com
issuer= /C=US/O=Google Inc/CN=Google Internet Authority G2
subject= /C=US/O=Google Inc/CN=Google Internet Authority G2
issuer= /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
subject= /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
issuer= /C=US/O=Equifax/OU=Equifax Secure Certificate Authority

Observe cómo el emisor de un certificado es adyacente al sujeto de los padres [inmediatamente debajo]

Aquí hay otro ejemplo de cómo puede usar ese script para inspeccionar un archivo local.

$ < /etc/pki/tls/certs/example.ca-bundle ssl-rfc-xargs openssl x509 -subject -issuer -noout
Cameron Kerr
fuente