Finden Sie heraus, wie viele Browser das SSL-Zertifikat ablehnen

11

Ich möchte herausfinden, wie viele Browser unser SSL-Zertifikat ablehnen, wenn sie HTTP-Anfragen an unseren Webserver senden. Wir verwenden eine kostenlose Zertifizierungsstelle, die mittlerweile von den meisten modernen Browsern erkannt wird, aber ich möchte einige Zahlen erhalten, ohne die Kombinationen von Browsern und Betriebssystemen ausführlich zu testen.

Ich verstehe, dass der Browser die Verbindung beendet, wenn die Zertifikatsüberprüfung fehlschlägt. Gibt es also eine Möglichkeit für Apache, dies zu erkennen? Ich erwarte keine spezifischen Diagnoseinformationen - nur die Tatsache, dass ein Zertifikat- / SSL-Problem aufgetreten ist, reicht aus.

Matt
quelle
1
Ich bezweifle, dass dies mit Apache möglich ist, wahrscheinlich viel einfacher, wenn man so etwas wie HAProxy vor Apache stellt.
Florin Asăvoaie
Das SSL-Protokoll verfügt über ein Fehlercodefeld, über das der Teilnehmer, der die Verbindung beendet, dem anderen Ende mitteilen kann, warum die Verbindung beendet wurde. Ich weiß nicht, wie spezifisch die Informationen in diesem Bereich sind oder ob sie überhaupt auf diesen speziellen Fall anwendbar sind. Ich werde dieser Frage folgen, da sich die Antwort auch für mich als nützlich erweisen kann.
Kasperd

Antworten:

3

Das SSL-Protokoll hat in der Tat einen Warncode für den Fall, dass die Zertifizierungsstelle unbekannt ist. Sie können ihn vermutlich mit etwas wie tshark erkennen.

Sinnvoller ist es jedoch, zu wissen, wie das Problem vermieden werden kann. Stellen Sie in Apache sicher, dass Sie die folgenden DREI Anweisungen haben:

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

Die Erweiterungen der Dateinamen sind für Apache nicht wirklich wichtig. In diesem Fall ist die SSLCertificateFile ein einzelnes X.509-Zertifikat mit dem Betreff des Servers, und die SSLCertificateChainFile ist eine Verkettung von Intermediate- und Root-CA-Zertifikaten (beginnend mit dem Root zuerst).

Hier ist ein nützliches Skript, mit dem Sie Zertifikatsketten in der PEM-Codierung untersuchen können.

#!/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)
    }
    '

(Dieses spezielle Skript wird auch für eine bestimmte XML-Anwendung verwendet. Dies sollen die sed-Bits in der Nähe des Starts unterstützen. Die interessanten Bits werden von gawk ausgeführt.)

Hier ist ein Beispiel, wie Sie es verwenden können (z. B. um festzustellen, ob die Zertifikate im CA-Bundle in der richtigen Reihenfolge sind - manchmal ist dies wichtig).

$ 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

Beachten Sie, wie der Aussteller eines Zertifikats neben dem Thema des Elternteils [unmittelbar unten] steht.

Hier ist ein weiteres Beispiel, wie Sie dieses Skript verwenden können, um eine lokale Datei zu überprüfen.

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