Защита WIFI для веб-приложения

Я создал веб-приложение CORS (только javascript), где я хотите установить и запустить в разных локальных сетях.

Я бы хотел поставить SSL, но я не знаю, какая именно конфигурация lan будет и, вероятно, каждый раз будет отличаться. Так что я думаю, я не могу добавить сертифицированный SSL. Есть ли какие-либо другие решение с SSL? Мне не нравится подход добавления несертифицированного SSL из-за предупреждений.

Как еще я могу зашифровать пакеты и сделать безопасную аутентификацию запросы? Я использую CouchDB по умолчанию CORS, но пакеты могут быть понюхать, если веб-приложение установлено и используется в открытом WIFI. Приложение использует только javascript, и я не знаю, как я могу (единственное бэкэнд - это хранилище на couchDB).

Ответ 1

Конструкция вашего приложения с поддержкой CORS напрямую не связана с использованием SSL. См. этот раздел спецификации CORS.

Разработка вашего приложения для поддержки CORS и обслуживания вашего приложения через SSL-соединение - это отдельные решения и даже не могут быть сделаны теми же людьми. Когда вы говорите "установлено и работает в разных локальных сетях", я предполагаю, что вы имеете в виду, что разные люди/компании будут размещать ваш серверный код, возможно, в разных доменах.

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

Ответ 2

Из того, как я понимаю ваш вопрос (только для JavaScript), вы можете использовать один хост HTTPS для работы с файлами JavaScript, так же как размещенные в Google библиотеки.

Если хосты CouchDB не будут находиться в облаке, вам следует назначить для них индивидуальные (дешевые) сертификаты SSL. Клиенты должны иметь возможность раскошелиться на ~ 8 $/год для безопасности транспортного уровня, если для них действительно важна безопасность.

Ответ 3

Итак, если я правильно понял ваш вопрос:

  • У вас есть веб-приложение, к которому можно получить доступ, используя запросы с кросс-началом.
  • Это приложение будет развернуто в локальных сетях, т.е. будет доступно через негосударственный IP-адрес (аппарат, обслуживающий его в этой сети, я буду называть его "локальным сервером" ).
  • Вы хотите защитить связь между клиентом и локальным сервером, предпочтительно используя SSL.

Вы можете это сделать! Сделайте, кто имеет контроль над локальным сервером, получите сертификат SSL для somesubdomain.SomeDomainHeControls.com, разверните этот сертификат на локальном сервере и укажите этот поддомен на локальный IP-адрес. Когда приложение будет доступно через этот адрес, вы не получите никаких предупреждений, и соединение будет защищено. Пока клиент только обращается к вашему приложению с использованием этого домена, это безопасно, поскольку только владелец сервера имеет доступ к ключу.

Если вы управляете локальным сервером самостоятельно (никто не может извлечь закрытый ключ), вы можете просто получить сертификат wildcart для *.aDomainForThisPurposeThatYouControl.com и создать субдомен для каждого развертывания, указав на соответствующий IP.

Если вы не контролируете локальный сервер, и тот, кто не может получить свой собственный сертификат, вы можете получить для них индивидуальные сертификаты. Это означало бы, что вы создаете deployment1.aDomainForThisPurposeThatYouControl.com, укажете его на локальный IP-адрес, создадите регулярный сертификат с одним хостом для этого имени и установите его на локальном сервере. В качестве меры предосторожности не используйте этот домен для чего-либо еще, поскольку вы предоставили личные ключи для хостов в этом домене.

Вы также можете разместить приложение непосредственно на внешнем сервере под вашим контролем, если локальные сети имеют доступ к Интернету. Разверните обычный SSL на этом сервере. После того как само приложение было загружено с внешнего сервера надежно, оно может сделать простые HTTP-запросы для получения данных с локального сервера. Это вызовет предупреждение "смешанного содержимого", но не будет ошибки SSL. Затем вы можете использовать шифрование на основе JavaScript для защиты данных. Например, если вы хотите защитить данные, идущие от клиента к серверу, ваш внешний доверенный сервер может предоставить клиенту доверенные JS-крипто-библиотеки и открытый ключ RSA внутреннего сервера (через SSL-аутентифицированное соединение), то вы просто зашифровываете свои данные на стороне клиента перед отправкой через простой HTTP. Теоретически вы даже можете создать SSL-клиент в JavaScript, предоставить клиенту script и сертификат доверенного сервера, использовать туннель HTTP или WebSockets, а через этот туннель запустите собственное SSL-соединение между локальным сервером и Клиент JavaScript. Это, конечно, не очень практично, но безопасно (поскольку JS загружается через безопасное соединение). Вы также можете просто загрузить небольшой JavaScript с доверенного сервера, который затем загружает остальное с локального сервера, проверяет подпись/хэш и выполняет его. Megaupload делает что-то подобное.