Самая короткая версия моего вопроса заключается в том, что вызов ServerManager.Binding.Remove
, кажется, удаляет привязку из IIS, но все равно оставляет его в HTTP.sys или везде, где установлены привязки SSL и разрывы слоев моего кода дальше.Calling Bindings.Remove не удаляет SSL-сертификат из HTTP.sys
У меня работает служба облачного облака, которая должна использовать SNI для поддержки нескольких имен хостов с использованием SSL. Фактически то, что я делаю, в OnStart удаляет привязку по умолчанию, используя ServerManager.Binding.Remove(binding)
и добавляя мои собственные привязки, используя ServerManager.Binding.Add(binding)
. Так, например:
ServerManager serverManager = new ServerManager();
Site site = serverManager.Sites[0];
// Add my site bindings.
foreach (string host in listOfHostsToBind)
{
X509Certificate2 cert = LookupCertificate(host.sslThumbprint);
var binding = site.Bindings.Add(":443:" + host, cert.GetCertHash(), "My");
binding.SetAttributeValue("sslFlags", 1); //Set SNI flag
}
// Remove the default binding
var bindingsToRemove = new List<Binding>();
foreach (Binding binding in site.Bindings)
{
if (binding.Protocol == "https" && Convert.ToInt64(binding.Attributes["sslFlags"].Value) != 1)
{
bindingsToRemove.Add(binding);
}
}
foreach (Binding binding in bindingsToRemove)
{
site.Bindings.Remove(binding);
serverManager.CommitChanges();
}
serverManager.CommitChanges();
Что в конечном итоге происходит, что IP по умолчанию: Port Binding удаляется из списка привязок IIS, но он по-прежнему отображается в списке SSL привязок, когда я звоню netsh http show sslcert
.
Так, например, вот результат вызова Get-WebBinding
в Powershell. Обратите внимание на то, что IP-адрес по умолчанию: Порт привязки не существует:
protocol bindingInformation sslFlags
-------- ------------------ --------
http 10.20.30.40:80: 0
https :443:myfirstaddedhost.com 1
https :443:mysecondaddedhost.com 1
Выглядит хорошо, но он по-прежнему не работает, потому что если я бегу netsh http show sslcert
я получаю следующее:
IP:port : 10.20.30.40:443
Certificate Hash : xxx
Application ID : {00000000-0000-0000-0000-000000000000}
Certificate Store Name : MY
...
Hostname:port : myfirstaddedhost.com:443
Certificate Hash : xxx
Application ID : {4dc3e181-e14b-4a21-b022-59fc669b0914}
Certificate Store Name : My
...
Hostname:port : mysecondaddedhost.com:443
Certificate Hash : xxx
Application ID : {4dc3e181-e14b-4a21-b022-59fc669b0914}
Certificate Store Name : My
...
Почему бы Связывание SSL-сертификата все еще существует, если я успешно удалю привязку из IIS с помощью ServerManager?