Scopri quanti browser rifiutano il certificato SSL


11

Vorrei scoprire quanti browser rifiutano il nostro certificato SSL quando inviamo richieste HTTP al nostro server web. Stiamo utilizzando una CA gratuita che ora sembra essere riconosciuta dalla maggior parte dei browser moderni, ma mi piacerebbe ottenere alcuni numeri senza testare in modo esaustivo combinazioni di browser e sistemi operativi.

Comprendo che il browser interrompe la connessione quando la verifica del certificato fallisce, quindi Apache è in grado di rilevarlo? Non mi aspetto di ottenere informazioni diagnostiche specifiche: è sufficiente il fatto che si sia verificato un problema certificato / SSL.


1
Dubito che sia possibile farlo con Apache, probabilmente molto più facile da mettere mettendo qualcosa come HAProxy di fronte ad Apache.
Florin Asăvoaie,

Il protocollo SSL ha un campo di codice di errore, che la parte che termina la connessione può utilizzare per comunicare all'altra estremità, perché la connessione è stata interrotta. Non so quanto siano specifiche le informazioni in quel campo o se siano applicabili anche a questo caso specifico. Seguirò questa domanda, poiché la risposta può rivelarsi utile anche a me stesso.
Kasperd,

Risposte:


3

Il protocollo SSL ha davvero un codice di avviso per quando la CA è sconosciuta ... potresti rilevarlo usando qualcosa come Tshark, suppongo.

ma è più utile sapere come evitare il problema. In Apache, assicurati di avere le seguenti TRE direttive:

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

Le estensioni fornite ai nomi dei file non contano molto per Apache. In questo caso, SSLCertificateFile sarà un singolo certificato X.509 con l'oggetto del server e SSLCertificateChainFile sarà una concatenazione di certificati CA intermedi e radice (a partire dalla radice prima).

Ecco uno script utile per aiutare a esplorare le catene di certificati nella codifica 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)
    }
    '

(questo particolare script viene utilizzato anche per una particolare applicazione XML, che è ciò che i bit sed vicino all'inizio sono pensati per supportare; i bit interessanti sono fatti da gawk.)

Ecco un esempio di come è possibile utilizzarlo (ad esempio per determinare se i certificati nel pacchetto CA sono nell'ordine giusto, a volte questo è 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

Si noti come l'emittente di un certificato sia adiacente all'oggetto del genitore [immediatamente sotto]

Ecco un altro esempio di come è possibile utilizzare quello script per ispezionare un file locale.

$ < /etc/pki/tls/certs/example.ca-bundle ssl-rfc-xargs openssl x509 -subject -issuer -noout
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.