Последнее время, многие сайты переезжают на https и получают в связи с этим следующую проблему - сайт на разных компьютерах то открывается, то нет (с ошибкой о том что сертификат недостоверен). Выглядит это как на скриншоте слева.
Все дело в том, что ssl устроен немного сложнее, чем все привыкли. Обычно сертификат для Вашего сайта подписан не самим корневым сертификатом, а промежуточным. Выглядит это так: корневым сертификатом подписан промежуточный, промежуточным подписан ваш.
На скриншоте справа изображена цепочка сертификатов этого блога.
Во всех современных операционных системах и всех используемых браузерах имеются корневые сертификаты доверенных центров, но если заглянуть глубже, то оказывается, что в довольно большой части систем, присутствуют еще и промежуточные сертификаты, но далеко не во всех.
Так что же это все значит? Это значит, если компьютер пользователя не имеет у себя промежуточного сертификата, то проверить подлинность вашего - он не может. Это и объясняет, что на компьютерах без него сайт открываться не будет, а на компьютерах с ним - откроется без каких либо проблем. Скорее всего на вашем компьютере регулярно устанавливаются обновления и проблемы такой не будет. Но кто же может ручаться за обновления windows у пользователей?
Везде и всегда есть выход, ведь далеко не дураки придумали https.
При покупке сертификата у Вас есть ключ (private key), запрос (certificate request) и сам сертификат (certificate). Но так же, во всех случаях, когда сертификат подписан промежуточным (а это более половины случаев), доступен еще и промежуточный сертификат.
Настроить сервер нужно на отдачу сразу и самого сертификата сайта и промежуточного сертификата (кстати их может быть несколько).
Специально на этот счет имеется официальная русскоязычная документация к серверу nginx: цепочки ssl-сертификатов
Кратко о том как это делается:
$ cat site.com.crt intermediate.crt > sitecom.com-fullchain.crt
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:
SSLCertificateFile /etc/ssl/crt/yourdomain.com.crt //Ваш сертификат для yourdomain.com
SSLCertificateKeyFile /etc/ssl/crt/private.key //Приватный ключ
SSLCertificateChainFile /etc/ssl/crt/intermediate.crt //Промежуточный сертификат
В панелях хостингов обычно есть дополнительное поле для загрузки промежуточного сертификата, либо документация как собрать сертификаты в один файл.
Не забывайте промежуточный сертификат и все будет работать.
Имеется такое явление набравшее свою популярность, как letsencrypt/certbot. Он выдает ssl-сертификаты автоматически и всем подряд. В целом это его основная проблема.
Как сделать так, чтобы Ваш IT-отдел не стал местом утечки информации за которую Вы отвечаете?
И снова о маленьких сетевых фокусах ради надежности работы web-сервисов
Позволяет решать интеллектуальные задачи, помимо задач самого мониторинга
Протокол WebSocket имеет свои преимущества и свои недостатоки: детальный разбор
Не секрет, что при хорошо настроенный сервер падает гораздо реже, чем доступ из него в интернет