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

Все дело в том, что ssl устроен немного сложнее, чем все привыкли. Обычно сертификат для Вашего сайта подписан не самим корневым сертификатом, а промежуточным. Выглядит это так: корневым сертификатом подписан промежуточный, промежуточным подписан ваш.

На скриншоте справа изображена цепочка сертификатов этого блога.

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

Так что же это все значит? Это значит, если компьютер пользователя не имеет у себя промежуточного сертификата, то проверить подлинность вашего - он не может. Это и объясняет, что на компьютерах без него сайт открываться не будет, а на компьютерах с ним - откроется без каких либо проблем. Скорее всего на вашем компьютере регулярно устанавливаются обновления и проблемы такой не будет. Но кто же может ручаться за обновления windows у пользователей?

Везде и всегда есть выход, ведь далеко не дураки придумали https.

При покупке сертификата у Вас есть ключ (private key), запрос (certificate request) и сам сертификат (certificate). Но так же, во всех случаях, когда сертификат подписан промежуточным (а это более половины случаев), доступен еще и промежуточный сертификат.

Настроить сервер нужно на отдачу сразу и самого сертификата сайта и промежуточного сертификата (кстати их может быть несколько).

Nginx

Специально на этот счет имеется официальная русскоязычная документация к серверу nginx: цепочки ssl-сертификатов

Кратко о том как это делается:

  • Берем файлы сертификата (далее, site.com.crt) и промежуточный сертификат (intermediate.crt) и собираем в один файл:
    $ cat site.com.crt intermediate.crt > sitecom.com-fullchain.crt
  • Подключаем собранный файл и ключ в nginx:
    server {
    	    listen              443 ssl;
    	    server_name         www.site.com;
    	    ssl_certificate     www.site.com-fullchain.crt;
    	    ssl_certificate_key www.site.com-key.key;

Apache

В Apache это делается немного иначе. Привожу строки из конфигруации Apache:

SSLCertificateFile /etc/ssl/crt/yourdomain.com.crt           //Ваш сертификат для yourdomain.com
SSLCertificateKeyFile /etc/ssl/crt/private.key               //Приватный ключ
SSLCertificateChainFile /etc/ssl/crt/intermediate.crt        //Промежуточный сертификат

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

Итог

Не забывайте промежуточный сертификат и все будет работать.


LetsEncrypt: делаем фальшивый cert своими руками

Имеется такое явление набравшее свою популярность, как letsencrypt/certbot. Он выдает ssl-сертификаты автоматически и всем подряд. В целом это его основная проблема.

Почему балансировщик http нужно размещать в другом сегменте

И снова о маленьких сетевых фокусах ради надежности работы web-сервисов

Сводная система мониторинга

Позволяет решать интеллектуальные задачи, помимо задач самого мониторинга

Проблемы WebSocket в средней полосе России

Протокол WebSocket имеет свои преимущества и свои недостатоки: детальный разбор

Сеть для нужд мониторинга: как устроено у нас

Не секрет, что при хорошо настроенный сервер падает гораздо реже, чем доступ из него в интернет

Nginx, Php-Fpm и что это вообще?

Что такое php-fpm и зачем он нужен более-менее посещаемым проектам? Какие неприятности несет в себе переход с apache на fpm? Какие проблемы решает реально, а какие - надумано?