Программно добавить привязку к IIS 8 с опцией SNI

Я пытаюсь создать привязки для IIS 8 с установленным флагом SNI (указание имени сервера) с помощью библиотеки Microsoft.Web.Administration (.NET Framework).

Это необходимо мне, потому что я хочу получить несколько привязок SSL для одного и того же веб-сайта в IIS, используя только один IP-адрес. Это одна из основных новых функций IIS 8.

Я просматривал класс Binding и не могу найти ни одного флага или опции, чтобы указать это.

Возможно ли это с текущей версией Microsoft.Web.Administration v 7.0.0.0? Потребуется ли мне новая версия, которую я не нашел?

Я знаю, что версия 7.9.0.0 предназначена только для IIS Express, и это не мой сценарий, поэтому я не изучал ее.


person tittodiego    schedule 09.12.2013    source источник
comment
Дополнительные технические подробности за сценой можно найти в blog.lextudio.com/2015/05/ Независимо от того, какой источник вы используете для получения сборки MWA в самом начале, вы должны придерживаться копии, поставляемой с IIS (например, вы узнали наконец).   -  person Lex Li    schedule 30.05.2015


Ответы (2)


В конце концов мне удалось это сделать с помощью Microsoft.Web.Administration из папки %windir%\system32\inetsrv\, но только в Windows 8/Windows 2012 с IIS 8.

Эти библиотеки имели параметр SslFlags в функции Add для класса BindingCollection. Для этой новой перегрузки пока нет документации от Microsoft, по крайней мере, я ее не нашел.

SslFlags.Sni доступен для использования в этом и отлично создает привязку с проверкой SNI.

person tittodiego    schedule 18.12.2013
comment
Для этого сейчас есть пакет NuGet (один для сообщества): nuget.org/ пакеты/IIS.Microsoft.Web.Adminstration. Не знаю, почему MS не обновляет его. - person Mrchief; 29.05.2015
comment
@Mrchief, никогда не используйте пакет NuGet. Ваше приложение всегда должно ссылаться на версию, установленную на машине в каталоге system32\inetsrv, и никогда не копировать ее локально. - person Lex Li; 30.05.2015
comment
@LexLi К сожалению, эта практика постепенно устаревает. Пакеты NuGet и локальная копия (бины для развертывания) — это путь вперед! - person Mrchief; 30.05.2015
comment
@Mrchief, дальнейший путь просто не применим к MWA, который был разработан таким образом, зависящим от ОС (к сожалению, с привязкой к COM). Корпус MWA не устарел, а конструктивно, и пока я не вижу никаких изменений в этой сборке. - person Lex Li; 30.05.2015
comment
Аргумент «путь вперед» заключался в том, чтобы развертывать в мусорном ведре, а не развертывать на машине. Официальный пакет Nuget предназначался для администрирования IIS 7.x, тогда как сейчас у нас есть IIS 10. Это в любом случае довольно сильно устарело. - person Mrchief; 30.05.2015
comment
Когда выйдет IIS 10, вам следует использовать его собственную версию MWA. Я могу только надеяться, что в случае с IIS 10 бин развертываемый ломается хуже, чтобы напомнить людям о простых фактах, которыми они пренебрегают. - person Lex Li; 30.05.2015
comment
Есть ли способ сделать это через appcmd? Я пытался, но он не распознает свойство sslFlags, или, возможно, я делаю это неправильно. Документы показывают свойство, но ни один из примеров не показывает, как его использовать. Документы IIS - person Clayton Hyatt; 22.09.2015

Возможно ли это с текущей версией Microsoft.Web.Administration v 7.0.0.0?

Действительно так, вручную добавив атрибут SslFlags к узлу <binding>:

Binding mySslBinding;
bool enableSni;

using (var serverManager = new ServerManager())
{
    // ... create or get value of mySslBinding...

    mySslBinding.SetAttributeValue("sslFlags", Convert.ToInt32(enableSni ? 1 : 0));

    serverManager.CommitChanges();
}

См. документацию по SslFlags здесь: https://docs.microsoft.com/en-us/iis/configuration/system.applicationhost/sites/site/bindings/binding

Обратите внимание, что выполнение приведенного выше кода на компьютере с любой версией IIS до 8.0 приведет к тому, что метод CommitChanges() вызовет исключение, поскольку sslFlags не существует в этих версиях.

Предупреждение. Включение SNI для существующей привязки может привести к тому, что ее сертификат не будет выбран!

См. также Настройка указания имени сервера (SNI) снимает привязку сертификата< /а>

Чтобы избежать этой проблемы, вы можете сделать следующее:

var cert = mySslBinding.CertificateHash;
mySslBinding.SetAttributeValue("SslFlags", Convert.ToInt32(1));
mySslBinding.CertificateHash = cert;
person Ian Kemp    schedule 19.03.2015