Descubra 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 pelos navegadores mais modernos, mas eu gostaria de obter alguns números sem testar exaustivamente as combinações de navegadores e sistemas operacionais.

Entendo que o navegador encerra a conexão quando a verificação do certificado falha, então existe alguma maneira do Apache detectar isso? Não espero obter informações de diagnóstico específicas - basta o fato de que houve um problema de certificado / SSL.

Matt
fonte
1
Duvido que seja possível fazer isso com o Apache, provavelmente muito mais fácil, colocando algo como HAProxy na frente do Apache.
Florin Asăvoaie
O protocolo SSL possui um campo de código de erro, que a parte que encerra a conexão pode usar para informar à outra extremidade, por que a conexão foi encerrada. Não sei quão específicas são as informações nesse campo ou se são aplicáveis ​​a esse caso específico. Vou seguir esta pergunta, já que a resposta também pode ser útil para mim.
Kasperd

Respostas:

3

O protocolo SSL realmente tem um código de alerta para quando a CA é desconhecida ... você pode detectá-lo 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 atribuídas aos nomes dos arquivos realmente não importam 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 CA intermediários e raiz (começando pela raiz primeiro).

Aqui está um script útil para ajudar a explorar 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\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)
    }
    '

(esse script específico também é usado para um aplicativo XML específico, que é o que os bits sed próximos ao início devem oferecer; os bits interessantes são feitos pelo gawk.)

Aqui está um exemplo de como você pode usá-lo (como determinar se os certificados no pacote CA estão na ordem correta - às vezes isso importa)

$ 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 da controladora [imediatamente abaixo]

Aqui está 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
Cameron Kerr
fonte