В последнее время многие сайты переезжают на 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        //Промежуточный сертификат

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

Итог

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