Сторонний подписанный SSL-сертификат для localhost или 127.0.0.1? - PullRequest
24 голосов
/ 22 июля 2011

Не раскрывая слишком много информации, мне нужно настроить систему веб-сервера, которая предназначена для использования конечными пользователями по всему Интернету.

вариант использования таков:

  • конечные пользователи (обычно) находятся в своих домах за своими локальными брандмауэрами при подключении к системе.
  • Система состоит из удаленного сервера, размещенного нами, строго через https (с использованием SSL)
  • Механизм авторизации требует самостоятельного создания учетной записи пользователя на удаленном сервере, который после успешного создания учетной записиЗатем потребуется загрузить программное обеспечение и установить его на компьютер конечного пользователя.Это программное обеспечение содержит, помимо прочего, локальный веб-сервер.
  • Этот «локальный» веб-сервер также должен разрешать только https-подключения к браузеру пользователя.

Поскольку распределенное программное обеспечение будет уникальным веб-сервером на компьютере каждого отдельного пользователя, я не уверен, как или даже если это возможно, получить сертификат SSL, подписанный ТРЕТЬИМИ ЛИЦАМИ, который не будетвызывать ошибки достоверности, когда пользователь подключается к нему через веб-браузер.Конечно, он может использовать самозаверяющие сертификаты SSL, но идея состоит в том, чтобы избегать предупреждений браузера, чтобы конечные пользователи неявно «доверяли» данным, поступающим из их собственного приложения, работающего через веб-сервер через SSL.

Возможно ли это

Ответы [ 5 ]

24 голосов
/ 11 июня 2015

localhost

Вам никогда не будет выдан надлежащий сертификат https для localhost. строго запрещено .Потому что причины .

Короче говоря:

  • Неправильно настроенные устройства на самом деле существуют , в дикой природе, которые ждут поиска, прежде чем разрешить localhost из/etc/hosts
  • Если маршрутизатор определяет localhost.foo.local, это может привести к неправильному разрешению localhost (вы, вероятно, видели этот класс ошибок раньше)

Вы можете создать корневой сертификат и , затем создают так называемый «самоподписанный» сертификат, подписанный созданным вами корневым сертификатом.Вы по-прежнему получите уродливый экран предупреждения, но он будет работать.

localhost.YOURSITE.com (указывает на 127.0.0.1)

Вместо действительных сертификатов localhost я делаю то, что предлагает Евгений, - создаю запись 127.0.0.1 в открытом доступе.

Вы можете получить бесплатные сертификаты HTTPS для localhost.YOURSITE.com через Let'sШифрование через https://greenlock.domains. Просто выберите опцию DNS вместо опции HTTP File Upload

Укажите для вашего localhost.MY-SLD.MY-TLD 127.0.0.1

  • Приобретите сертификат *.localhost.example.com и выдайте каждой установке секрет xyz.localhost.example.com (и включите его в общий список суффиксов для предотвращения атак на example.com)
  • Используйте приложение с поддержкой greenlock генерировать такие сертификаты на лету (через https://letsencrypt.org) непосредственно на клиенте (или передать их клиенту)

Если вы не включены в PSL, отметьте, что:

  • сеансы, локальное хранилище, indexeddb и т. Д. Совместно используются доменом
  • при изменении порта doe* не изменяют их общий доступ

Будьте вашим собственным корневым сертификатом

Обновление : с такими вещами, как greenlock , которые используют ACME / Let's Encrypt,это уже не особенно актуально.

Это, вероятно, очень плохая идея, потому что мы не хотим, чтобы пользователи привыкли к установке корневых ЦС как бы то ни было (и мы знаем, как это оказалось для Lenovo ), но для корпоративных / клонированных машин это может быть разумным малобюджетным вариантом.

15 голосов
/ 07 марта 2014

У меня было такое же требование.Поэтому причина, по которой вам нужно использовать SSL, заключается в том, что почти каждый браузер теперь использует barfs, если вы используете https и пытаетесь подключиться к ресурсу http, даже если ресурс http находится на localhost, что глупо для меня.

Потому чтоJS SOP наш локальный веб-сервер обслуживает файл js, а затем JS внутри веб-приложения может выполнять вызовы на этот локальный веб-сервер.

Таким образом, мы указали local.example.com на 127.0.0.1 и фактически купилиSSL-сертификат для этого имени хоста.Затем мы отправляем закрытый ключ внутри этого веб-сервера, который устанавливается на компьютер пользователя.Да, мы сумасшедшие.

Все это на самом деле работает довольно хорошо.Вот уже 6 месяцев мы работаем с несколькими сотнями пользователей.

Единственная проблема, с которой мы иногда сталкиваемся, заключается в том, что это не работает, когда пользователь использует прокси-сервер.Запросы отправляются на прокси-сервер, и он пытается подключиться к 127.0.0.1 на прокси-сервере, который, очевидно, не работает.Обходной путь - добавить исключение в конфигурацию прокси-сервера, чтобы он пропускал прокси-сервер для запросов к local.example.com

Еще один сценарий, в котором будет немного сложно, - это когда пользователи пытаются использоватьCitrix или Terminal Services.Вы должны убедиться, что веб-сервер для каждого пользователя работает на другом порту, а затем сообщить своему удаленному веб-серверу номер порта, чтобы страницы, созданные на сервере, имели правильный номер порта.К счастью, мы еще не сталкивались с этим.Также кажется, что в наши дни все больше людей используют виртуальные машины вместо Citrix.

Вы когда-нибудь находили лучший способ?

2 голосов
/ 22 июля 2011

Возможно, вы можете сделать из этого предложения GlobalSign (другие CA предлагают аналогичные услуги). Вкратце, предложение позволяет вам иметь сертификат CA (и зарегистрировать сертификаты конечного пользователя для localhost / что угодно), который будет подписан сертификатом GlobalSign. Хотя стоимость может быть значительной (я думаю, что они определяют ее в каждом конкретном случае).

1 голос
/ 28 декабря 2016

Поскольку вы находитесь на локальном хосте, вы можете указать своему браузеру доверять любому сертификату, который вы хотите.

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

0 голосов
/ 23 октября 2017

Решение "Укажите свой localhost.MY-SLD.MY-TLD на 127.0.0.1", предоставленное , предоставленное CoolAJ86 , отлично работает, и вы найдете более подробное объяснение здесь:
Как PLEX делает https для всех своих пользователей

PS: я просто не знаю, насколько это устойчиво, потому что кто-то с похожим сценарием отозвал свой ключ в СА, как если бы этот ключ был скомпрометирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...