Почему браузеры не доверяют самоподписанным SLL-сертификатам даже в случае localhost?
Суть неавторитетных HTTPS-сертификатов в случае опубликованных в интернете сайтов более-менее ясна. Но почему браузеры поднимают тревогу на localhost-е?
Как-то странно видеть подобные сообщения для сайтов/приложений, которые доступны по localhost-у. Что, кто-то другой может использовать мой localhost для публикации своих мошеннических сайтов? Если нет, то должна быть какая-то причина, по которой разработчики браузеров не доставили localhost в белый список.
Ответы (2 шт):
Самоподписанные SSL-сертификаты не могут быть проверены на достоверность с помощью третьей стороны, и браузеры должны отказываться от их использования с целью защиты пользователей от попадания в руки злоумышленников. Хотя localhost и используется часто для локальных тестов, большинство таких случаев не могут быть подтверждены третьими сторонами. Если пользователь использует самоподписанный SSL-сертификат для подключения к сайту, то кто-то другой может перехватить соединение, подменить оригинальный домен и предоставить ложные данные пользователю.
Браузеры не доверяют самоподписанным SSL-сертификатам, даже если вы пытаетесь использовать их на локальном хосте, потому что это может привести к возможности атаки "человек-в-середине" (man-in-the-middle attack).
Самоподписанный SSL-сертификат может быть создан любым человеком, и браузеры не могут проверить, что он настоящий и действительно принадлежит веб-серверу, к которому вы пытаетесь подключиться. Это может открыть возможность для злоумышленников перехватить ваше соединение, перехватывая трафик и перенаправляя его на свой сервер.
Чтобы предотвратить эту атаку, браузеры доверяют только тем сертификатам, которые были выданы доверенными центрами сертификации CA, как (Let's Encrypt](https://letsencrypt.org/ru/docs/certificates-for-localhost/). Эти компании проверяют, что доменное имя, для которого вы запрашиваете сертификат, действительно принадлежит вам, и выдаете сертификат, который может быть использован для подключения к вашему веб-серверу.
Если вы работаете на локальном хосте и не хотите покупать действительный SSL-сертификат, вы можете использовать сертификат, который был выдан локальным CA, например OpenSSL. Для этого вам нужно создать самоподписанный сертификат с помощью OpenSSL, а затем добавить его в доверенные сертификаты вашего браузера.
Есть умельцы которые решили данную незадачу путём формирования следующего репозитория: https://github.com/FiloSottile/mkcert.
И в добавок могу порекомендовать Let's Encrypt, у которого есть удобная утилита cetrbot для данных целей. На github у меня есть подробноу руководство по использованию этой утилиты https://github.com/ekangash/laravel-quick-start/blob/develop/!cheatsheets/certbot.md
