Узнайте, сколько браузеров отклоняют сертификат SSL

11

Я хотел бы узнать, сколько браузеров отклоняют наш сертификат SSL при отправке HTTP-запросов нашему веб-серверу. Мы используем бесплатный CA, который сейчас, похоже, признан большинством современных браузеров, но я хотел бы получить некоторые цифры без тщательного тестирования комбинаций браузеров и операционных систем.

Я понимаю, что браузер прерывает соединение при сбое проверки сертификата, так есть ли у Apache способ обнаружить это? Я не ожидаю получения конкретной диагностической информации - достаточно того факта, что была проблема с сертификатом / SSL.

Matt
источник
1
Я сомневаюсь, что это возможно сделать с помощью Apache, возможно, гораздо проще сделать это, поставив что-то вроде HAProxy перед Apache.
Florin Asăvoaie
Протокол SSL действительно имеет поле кода ошибки, которое сторона, разрывающая соединение, может использовать, чтобы сообщить другому концу, почему соединение было разорвано. Я не знаю, насколько конкретна информация в этой области или применима ли она к этому конкретному случаю. Я буду следить за этим вопросом, поскольку ответ может оказаться полезным и для меня.
Касперд

Ответы:

3

Протокол SSL действительно имеет код предупреждения, когда CA неизвестен ... вы можете обнаружить его, используя что-то вроде tshark, я полагаю.

но более полезно знать, как избежать проблемы. В Apache убедитесь, что у вас есть следующие ТРИ директивы:

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

Расширения, данные для имен файлов, на самом деле не имеют значения для Apache. В этом случае SSLCertificateFile будет одним сертификатом X.509 с темой сервера, а SSLCertificateChainFile будет объединением сертификатов промежуточного и корневого ЦС (начиная с корневого сначала).

Вот полезный скрипт, помогающий исследовать цепочки сертификатов в кодировке 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)
    }
    '

(этот конкретный скрипт также используется для конкретного XML-приложения, и это то, что биты sed в начале должны поддерживать; интересные биты сделаны gawk.)

Вот пример того, как вы можете использовать его (например, чтобы определить, что сертификаты в комплекте CA находятся в правильном порядке - иногда это имеет значение)

$ 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

Обратите внимание, что эмитент одного сертификата смежен с темой родителя [непосредственно ниже]

Вот еще один пример того, как вы можете использовать этот скрипт для проверки локального файла.

$ < /etc/pki/tls/certs/example.ca-bundle ssl-rfc-xargs openssl x509 -subject -issuer -noout
Кэмерон Керр
источник