Dowiedz się, ile przeglądarek odrzuca certyfikat SSL

11

Chciałbym dowiedzieć się, ile przeglądarek odrzuca nasz certyfikat SSL podczas wysyłania żądań HTTP do naszego serwera. Korzystamy z bezpłatnego CA, który wydaje się być rozpoznawany przez większość współczesnych przeglądarek, ale chciałbym uzyskać pewne liczby bez wyczerpującego testowania kombinacji przeglądarek i systemów operacyjnych.

Rozumiem, że przeglądarka przerywa połączenie, gdy weryfikacja certyfikatu nie powiedzie się, więc czy jest jakiś sposób, aby Apache to wykrył? Nie spodziewam się uzyskać szczegółowych informacji diagnostycznych - wystarczy fakt, że wystąpił problem z certyfikatem / SSL.

Matt
źródło
1
Wątpię, czy można to zrobić za pomocą Apache, prawdopodobnie znacznie łatwiej, umieszczając coś takiego jak HAProxy przed Apache.
Florin Asăvoaie
Protokół SSL ma pole kodu błędu, którego strona kończąca połączenie może użyć do poinformowania drugiego końca, dlaczego połączenie zostało zakończone. Nie wiem, jak szczegółowe są informacje w tym polu, ani czy w ogóle dotyczą one tego konkretnego przypadku. Postaram się odpowiedzieć na to pytanie, ponieważ odpowiedź może się również okazać przydatna dla mnie.
kasperd

Odpowiedzi:

3

Protokół SSL rzeczywiście zawiera kod ostrzegawczy, gdy CA jest nieznany ... można go wykryć za pomocą czegoś takiego jak tshark, jak sądzę.

ale bardziej pożyteczna jest umiejętność uniknięcia problemu. W Apache upewnij się, że masz następujące TRZY dyrektywy:

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

Rozszerzenia podane dla nazw plików tak naprawdę nie mają znaczenia dla Apache. W tym przypadku plik SSLCertificateFile będzie pojedynczym certyfikatem X.509 z podmiotem serwera, a plik SSLCertificateChainFile będzie połączeniem certyfikatów pośrednich i certyfikatów głównego urzędu certyfikacji (zaczynając od katalogu głównego).

Oto przydatny skrypt ułatwiający badanie łańcuchów certyfikatów w kodowaniu 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)
    }
    '

(ten konkretny skrypt jest również używany w przypadku konkretnej aplikacji XML, którą mają obsługiwać bity sed na początku; interesujące bity wykonuje gawk).

Oto przykład, w jaki sposób możesz go użyć (na przykład w celu ustalenia, czy certyfikaty w pakiecie urzędu certyfikacji są w odpowiedniej kolejności - czasami ma to znaczenie)

$ 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

Zwróć uwagę, w jaki sposób wystawca jednego certyfikatu przylega do przedmiotu rodzica [bezpośrednio poniżej]

Oto kolejny przykład wykorzystania tego skryptu do sprawdzania lokalnego pliku.

$ < /etc/pki/tls/certs/example.ca-bundle ssl-rfc-xargs openssl x509 -subject -issuer -noout
Cameron Kerr
źródło