Назад | Перейти на главную страницу

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

Мой хостинг-провайдер недавно перевыпущен и повторно установлен сертификат 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, если это так?

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

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

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

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

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

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

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

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

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

У меня была такая же ошибка, и оказалось, что я не включил директиву SSLCertificateChainFile, указывающую на мой fullchain.pem. После того, как я добавил это, я получил «Сертификат TLS правильно установлен» от digicert.

SSLCertificateFile /etc/letsencrypt/live/unternet.net/fullchain.pem
SSLCertificateChainFile /etc/letsencrypt/live/unternet.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/unternet.net/privkey.pem