Как сертификат SSL может работать только для некоторых клиентов?

11

Мой хостинг-провайдер недавно переиздал и заново установил SSL-сертификат для моего домена, после того как он допустил срок действия старого сертификата по ошибке.

Теперь я могу снова просматривать веб-сайт по протоколу HTTPS, как и мой хост, и ряд других пользователей.

Тем не менее, некоторые пользователи (по крайней мере дюжина из сотен) по-прежнему получают Your connection is not secureсообщения об ошибках в разных браузерах и платформах. (Трудно диагностировать проблему, которую я не могу воспроизвести.)

Я понимаю, что разные браузеры используют разные списки центров сертификации (CA.)

  1. Почему пользователь, использующий ту же версию Firefox, что и я (45.0.1 на OS X), получает SEC_ERROR_UNKNOWN_ISSUERошибку (только для моего сайта), а я нет? Что делает это возможным? Упомянутый пользователь очистил свой кеш и перезагрузил свой ноутбук.

Я провел проверку SSL на digicert.com . Результат таков:

SSL-сертификат не является доверенным

Сертификат не подписан доверенным органом (проверка на соответствие корневому хранилищу Mozilla). Если вы купили сертификат в доверенном органе, вам, вероятно, просто нужно установить один или несколько промежуточных сертификатов. Обратитесь к вашему поставщику сертификатов за помощью в этом для вашей серверной платформы.

  1. Почему я могу подключиться к сайту без ошибки SSL, если это так?
Фабьен Снауварт
источник
1
My hosting provider has recently re-issued and re-installed an SSL certificate for my domain, after they let the old one expire by mistake.- Почему вы оставили эту ответственность в их руках?
Joeqwerty
3
Просто потому, что я не являюсь системным администратором, я арендую у них управляемый выделенный сервер. (Для небольшой предыстории я пишу материал для изучения языка и код, помимо управления бизнесом, так что выполнение сисадмина тоже, хотя и интересно, было бы слишком много шляп.)
Фабьен Снауварт
7
@joeqwerty: Потому что это их работа? Он буквально платит им, чтобы разобраться с этим для него.
Гонки легкости на орбите
@LightnessRacesinOrbit: Это предположение я не сделал, поэтому вопрос.
Joeqwerty
1
bugzilla.mozilla.org/show_bug.cgi?id=399324 - это сообщение об ошибке, запрашивающее поддержку автоматической загрузки промежуточных сертификатов в Firefox. Дискуссия (сейчас 8 лет) сводится к "IE делает это!" / "К черту IE, RFC говорит, что это необязательно!" / "Вы когда-нибудь слышали о принципе надежности?" / "Ваша конфигурация сервера плохая, и вы должны чувствовать себя плохо!"

Ответы:

22

Цепочка сертификатов вашего сертификата является неполной. Скорее всего, ваш поставщик не смог установить промежуточный сертификат при установке нового сертификата.

В большинстве случаев такие промежуточные сертификаты предоставляются центром SSL для поддержки некоторых старых браузеров и операционных систем. Вот почему, хотя это работает для вас, это не работает для некоторых ваших клиентов.

Действительно отличная утилита для проверки проблем SSL на вашем сайте - это проверка SSL-сервера SSLlabs . Как видно из приведенной выше ссылки, здесь возникает не только проблема цепочки, но и алгоритм подписи, используемый для создания вашего сертификата, ваш веб-сервер по-прежнему уязвим для атаки POODLE и все еще поддерживает RC4, который также считается небезопасным ...

Я не хочу ничего говорить против вашего провайдера веб-сервера, но на вашем месте я бы отправил им письмо, чтобы они исправили все эти проблемы как можно скорее или изменили на другого провайдера ...

s1lv3r
источник
Спасибо, это очень полезно. Из чистого любопытства, есть идеи, почему клиент на OS X и той же версии Firefox, что и у меня, получает SEC_ERROR_UNKNOWN_ISSUERошибку, а я нет? Может быть, его версия ОС отличается?
Фабьен Снауварт
1
@FabienSnauwaert Да, если вы прокрутите вниз до «Моделирование рукопожатия», тест SSLLabs попытается смоделировать различные комбинации версий ОС / браузера. Браузер не обрабатывает SSL-соединения полностью сам по себе, но частично полагается на реализацию ОС. Так что, безусловно, версия ОС имеет значение.
s1lv3r
3
Дело не только в том, что клиенты могут иметь разные списки CA. Также возможно, что некоторые клиенты кэшируют промежуточные сертификаты, так что сайт с отсутствующим промежуточным сертификатом может работать, если браузер ранее посетил сайт, который правильно настроил этот промежуточный сертификат.
kasperd
Сайт SSLlabs - хороший инструмент. Спасибо за ссылку.
Parapluie
12

Чтобы сертификат был доверенным, он должен быть подписан объектом, которому доверяет комбинация вашего браузера / ОС, или который в свою очередь был подписан таким объектом. Обычно это делается одним доверенным корневым ЦС, который подписывает промежуточный ЦС, а промежуточный ЦС подписывает ваш сертификат. Это создает цепочку, как это:

  1. Root CA, которому доверяет ваш компьютер, и подписывает
  2. Средний CA, который подписывает
  3. Ваш сертификат, которому доверяют только из-за цепочки, ведущей обратно к корневому ЦС.

Проблема здесь с промежуточным сертификатом CA. Чтобы убедиться, что каждый может проверить цепочку вплоть до корневого ЦС, ваш провайдер должен включить промежуточный сертификат в конфигурацию своего сервера. В этом случае они не имеют.

Причина, по которой это работает для некоторых пользователей, заключается в том, что они имеют промежуточный сертификат в своем собственном «хранилище доверенных сертификатов». В этих случаях они примут ваш сертификат, потому что они уже доверяют промежуточному звену. Но в случае, когда у ваших посетителей другая ОС / браузер, у них нет промежуточного сертификата, поэтому им нужно будет получить его от вашего веб-сервера - а ваш веб-сервер его не раздает, поэтому у них нет никакого способа проверяя это.

Дженни Д
источник
Спасибо, это помогает мне ясно увидеть проблему сейчас. Есть ли хитрость, чтобы пользователи добавляли промежуточный сертификат в свое «хранилище доверенных сертификатов», ожидая, пока мой хост исправит сертификат? Например: посещение другого сайта SSL, который зависит от него или около того?
Фабьен Снауварт
1
@FabienSnauwaert К сожалению, нет хитрости. Простое посещение сайта с таким же промежуточным сертификатом не поможет; им нужно будет загрузить сертификат и вручную добавить его в свой браузер. Я считаю, что этот конкретный сертификат включен в более новые браузеры - он работает в Firefox 45.0.1, но не в 43.0.4, поэтому он был включен где-то между этими двумя версиями. Так что, если бы вы могли заставить своих клиентов обновить свои браузеры, это помогло бы.
Дженни Д
4
@JennyD Промежуточные сертификаты кэшируются современными браузерами, поэтому посещение другого сайта, использующего тот же промежуточный продукт, вполне вероятно. Тем не менее, это не то, о чем нужно спрашивать своих пользователей ... (см .: bugzilla.mozilla.org/show_bug.cgi?id=629558 , sslmate.com/blog/post/chrome_cached_sha1_chains )
Боб,
0

Если вы использовали HTTP Pinning Public Key Pinning, и ваш провайдер выдал вам новый сертификат, публичные ключи могли уже измениться. Эти ключи сохраняются в браузере клиента на указанный вами период.

Джарвис
источник