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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.