Я написал приложение ASP.NET MVC, которое позволяет пользователю указывать свой собственный домен. У меня IIS настроен для отправки всех запросов на веб-сайт по умолчанию, поэтому мне не нужно использовать заголовки хоста. Все работает отлично. Единственная проблема - это SSL.
Я знаю, что этот вопрос задавали несколько раз на многих форумах, но ответы, как правило, противоречат друг другу или говорят в абсолютной форме (это невозможно). Для меня это не вариант. Я ищу здесь несколько вариантов; Я открыт для нестандартного :).
Я видел несколько конструктивных ответов, предлагающих использовать ISA-сервер в качестве SSL-прокси. Кто-нибудь знает об этом больше? Или кто-нибудь настроил это и добился успеха?
В основном я хочу предоставить своим пользователям способ запросить CSR из приложения, купить и загрузить сертификат SSL, вернуться в свое приложение и загрузить сертификат, выданный авторизованной сертификационной компанией.
Я бы хотел сделать это без необходимости предоставлять отдельные IP-адреса клиентам, которые хотят использовать собственный домен и ssl на своем сайте. Это просто потому, что мое приложение размещено в облаке Amazon, и они не хотят предоставлять мне большой блок IP-адресов.
Мое приложение может быть размещено на IIS6 или IIS7.
РЕШЕНИЕ: Спасибо за вашу помощь в этом, ребята. Я определенно не понимал этой проблемы так хорошо, как сейчас. Я думаю, что моим решением на данный момент будет создание подстановочного сертификата и принуждение моих клиентов использовать clientname.someshareddomain.com, если им нужно защищенное соединение. Для клиентов, которые просто не в порядке с этим, я, вероятно, предоставлю другой эластичный IP-адрес через вызов api для веб-служб Amazon, создам новый веб-сайт в IIS и укажу его в корневой папке моего приложения, а затем программно сгенерирую CSR из этого новый сайт. Мне просто нужно будет разработать какую-то сделку с Amazon, чтобы предоставить мне приличный блок IP-адресов.
Мне очень жаль, что вам не нравится ответ «вы не можете этого сделать», но вы не можете делать то, что хотите. Технология просто не позволяет этому работать так, как вы хотите.
Вот почему.
Протокол HTTP позволяет нескольким серверам совместно использовать IP-адрес. Это делается через заголовок хоста HTTP / 1.1:
Host: servername.example.com
Подтверждение SSL происходит перед происходит рукопожатие HTTP. Это означает, что сервер не знает, какой сертификат предоставить клиенту в зависимости от того, какой сервер хочет клиент.
Итак, старайтесь изо всех сил, но несколько сертификатов нельзя использовать на одном IP-адресе. Как бы вы ни старались и как бы сильно вы ни старались, это не вариант для вас.
Как сказал Майкл, если что-то невозможно, топанье ногой и надутость ничего не меняют.
Размещение отдельных сертификатов SSL на разных IP-адресах не является проблемой с технологической точки зрения; это просто проблема обеспечения (что является простым вопросом программирования) и наличие сетевого провайдера, который понимает потребности крупных компаний и готов предварительно выделить приличный размер блока адресов для доменов SSL.
Однако есть еще один вариант, известный как "Индикация имени сервера", посредством чего браузер может сообщить серверу, с каким vhost он хочет поговорить во время согласования SSL, поэтому сервер может предоставить правильный сертификат. К сожалению, поддержка этого не универсальна; согласно приведенной выше странице Википедии, ни IIS 6 ни 7 не может справиться с этим на стороне сервера, и вам нужно запустить Vista, чтобы использовать его с IE на стороне клиента (Firefox, Opera и Chrome все время поддерживали его).
Итак, если вы готовы переключиться на приличный веб-сервер и отчуждать ту часть вашей пользовательской базы, которая все еще использует устаревшие браузеры в старых ОС Microsoft, вы можете это использовать. Хотя, похоже, никто не хочет раздражать тетю Тилли, использующую IE 5.5 на Windows 98 ...
Если проблема заключается в обеспечении безопасных сеансов (а не в том, что каждый клиент владеет собственным сертификатом), почему бы не избавиться от бремени и сложности с помощью SSL-сертификата с подстановочными знаками?