Descobrir quantos navegadores rejeitam o certificado SSL

11

Gostaria de descobrir quantos navegadores rejeitam nosso certificado SSL ao fazer solicitações HTTP para nosso servidor da web. Estamos usando uma autoridade de certificação gratuita que agora parece ser reconhecida pela maioria dos navegadores modernos, mas eu gostaria de obter alguns números sem testar exaustivamente as combinações de navegadores e sistemas operacionais.

Eu entendo que o navegador encerra a conexão quando a verificação de certificado falha, então há alguma maneira de o Apache detectar isso? Eu não espero obter informações específicas de diagnóstico - apenas o fato de que houve um problema de certificado / SSL é suficiente.

    
por Matt 05.05.2014 / 15:24

1 resposta

3

O protocolo SSL realmente tem um código de alerta para quando a autoridade de certificação é desconhecida ... você poderia detectá-la usando algo como tshark, suponho.

mas mais útil é saber como evitar o problema. No Apache, verifique se você possui as TRÊS diretivas a seguir:

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

As extensões fornecidas aos nomes de arquivos não são realmente importantes para o Apache. Nesse caso, o SSLCertificateFile será um único certificado X.509 com o Assunto do servidor, e o SSLCertificateChainFile será uma concatenação de certificados de CA Intermediários e Raiz (começando com a raiz primeiro).

Aqui está um script útil para ajudar a explorar as cadeias de certificados na codificação 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/' \
    -e 's/^[ \t]*<\/ds:X509Certificate>[ \t]*$/-----END CERTIFICATE-----\n/' \
    -e 's/^\(.*\)<\/ds:X509Certificate>[ \t]*$/\n-----END CERTIFICATE-----\n/' \
| gawk -vcommand="$*" '
    /^-----BEGIN /,/^-----END / {
        print |& command
    }
    /^-----END / {
        while ((command |& getline results) > 0) {
             print results
        }
        close(command)
    }
    '

(este script em particular também é usado para uma aplicação XML em particular, que é o que os bits sed perto do início devem suportar; os bits interessantes são feitos pelo gawk.)

Veja um exemplo de como você pode usá-lo (por exemplo, para determinar se os certificados no pacote CA estão na ordem correta - às vezes isso é 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 como o emissor de um certificado é adjacente ao assunto do pai [imediatamente abaixo]

Veja outro exemplo de como você pode usar esse script para inspecionar um arquivo local.

$ < /etc/pki/tls/certs/example.ca-bundle ssl-rfc-xargs openssl x509 -subject -issuer -noout
    
por 06.05.2014 / 22:12