SSL-сертификаты с неизвестным доменным именем - PullRequest
5 голосов
/ 19 декабря 2009

У нас возникла проблема с защитой интрасети / интернет-сайта с помощью SSL, где мы не можем знать точное доменное имя заранее.

По сути, я пытаюсь создать программу, которая будет установлена ​​на веб-сервере. вне моего прямого контроля, чтобы быть доступным через внутри- или интернет. В любом случае Я хочу, чтобы это было безопасно через SSL (https). Для этого я хотел бы включить и установить сертификат SSL на целевой машине. Мой установщик полностью упакован и не должен требовать какого-либо конкретного вмешательства во время или после установки от моего конец. Проблема в том, что я не могу заранее знать имя или домен целевой машины имя, насколько я могу судить, соединение SSL будет возвращать предупреждения (или хуже?) при доступе, так как сертификат, который я включаю, будет (должен) иметь другой имя на нем.

Я действительно хочу избежать этих предупреждений, но я все еще хочу сохранить их в безопасности. Есть любой способ установить SSL-соединение без предупреждения сертификата без домена имя известно заранее?

Спасибо за любую помощь, которую вы, ребята, можете оказать.

Ответы [ 5 ]

9 голосов
/ 19 декабря 2009

То, что вы хотите сделать, невозможно. И вот почему.

Сертификат будет включать в себя набор имен (общее имя, возможно, наряду с альтернативными именами субъекта, возможно, включая подстановочные имена).

Веб-браузер клиента будет выполнять следующие действия:

  1. Пользователь хотел посетить "https://myapp.mydomain.com/blog/posts/1".
  2. Запрос выполняется через SSL, а имя домена в запросе - "myapp.mydomain.com".
  3. Получить сертификат с веб-сервера.
  4. Убедитесь, что хотя бы одно из имен в сертификате точно совпадает или совпадает с подстановочным знаком доменного имени в запросе.
  5. Показать страницу.

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

Похоже, вы ошибаетесь в том, что каким-то образом сертификат может "создать" или "установить" соединение SSL. Это неверно. Веб-сервер - Apache, IIS, Nginx, LigHTTPD или любой другой, который вы используете, - это программа, которая знает все аспекты SSL-соединения. Сертификат является просто файлом , который веб-сервер отправляет клиенту, , даже не открывая и не используя каким-либо образом .

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

2 голосов
/ 19 декабря 2009

Лучшее, что вы можете сделать, это купить SSL-сертификат с подстановочными знаками - но подождите, это не то, что вы думаете. Вам все еще нужно знать домен второго уровня (домен верхнего уровня «.com») заранее. Вы можете эффективно запросить сертификат, который распространяется на * .foo.com - тогда будет покрыт любой сайт, a.foo.com, b.foo.com. Конечно, эти сертификаты стоят дороже, чем сертификаты FQDN, потому что вы выполняете пикирование из дополнительной монеты.

-Oisin

1 голос
/ 19 декабря 2009

Каждый из этих сайтов должен иметь свой собственный сертификат SSL. Почему бы не предложить пользователю предоставить файл сертификата во время установки?

0 голосов
/ 22 июля 2010

Если я правильно вас понимаю, возможно, сейчас есть решение вашей проблемы. Однако это решение не поможет вам, если вы не можете указать, какие SSL-сертификаты будут передаваться с веб-сервера, на котором установлена ​​ваша программа (как уже упоминал кто-то другой). Если ваша программа содержит веб-сервер, у вас не будет этой проблемы.

Если вы начинаете с доверенного веб-сайта https, вы можете отправлять междоменные TLS (SSL) XmlHttp-запросы на веб-серверы, на которых работает ваше приложение. Это стало возможным благодаря использованию проекта Forge с открытым исходным кодом. В проекте используется реализация TLS, написанная на JavaScript, и небольшой Flash-SWF для обработки междоменных запросов. Ваша программа должна будет предоставить файл политики XML Flash, который предоставляет доверенному веб-сайту доступ к веб-серверу, на котором выполняется приложение.

Ваша программа также должна будет создать самозаверяющий SSL-сертификат и загрузить его на доверенный веб-сайт. Оттуда сертификат каждой программы может быть включен в список доверенных с помощью реализации JavaScript TLS. Кроме того, ваша программа может загрузить свой сертификат для подписи созданным центром сертификации, используя общее или альтернативное имя субъекта, которое подходит для вашего использования (оно не обязательно должно быть доменным именем). Затем вы можете использовать JavaScript, чтобы доверять сертификату CA и искать правильное имя в каждом сертификате.

Для более подробной информации ознакомьтесь с проектом Forge на github:

http://github.com/digitalbazaar/forge/blob/master/README

Ссылки на посты блога в конце содержат более подробную информацию о том, как это работает.

0 голосов
/ 19 декабря 2009

В большинстве (если не во всех) случаях сертификат SSL связан с веб-сервером (apache, IIS и т. Д.) И не является частью вашего приложения. Установить сертификат должен администратор веб-сервера, а не вы, как автор программы.

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

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