私の質問の最短バージョンは、ServerManager.Binding.Remove
を呼び出すと、IISからバインディングが削除されたように見えますが、HTTP.sysまたはSSLバインディングが設定され、私のコードのレイヤーはさらに下がっています。Bindings.Removeを呼び出すとHTTP.sysからSSL証明書が削除されない
私は、SNIを使用してSSLを使用して複数のホスト名をサポートするAzure Cloud Serviceを実行しています。効果的に私がやっているのは、OnStartでServerManager.Binding.Remove(binding)
を使ってデフォルトのバインディングを削除し、ServerManager.Binding.Add(binding)
を使って自分のバインディングを追加することです。だから、例えば:ポートは、IISバインディングのリストから削除されたバインディングが、私はnetsh http show sslcert
を呼び出すとき、それはまだSSLバインディングのリストに表示さ:
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ということです。
たとえば、PowershellのGet-WebBinding
を呼び出した出力は次のとおりです。ポートバインディングがない:私はnetsh http show sslcert
を実行する場合、私は、次を取得しているため、
protocol bindingInformation sslFlags
-------- ------------------ --------
http 10.20.30.40:80: 0
https :443:myfirstaddedhost.com 1
https :443:mysecondaddedhost.com 1
はよさそうだが、それはまだ動作しません:
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
...
なぜだろうデフォルトIPがあることに注意してくださいServerManagerを使用してIISからのバインディングを正常に削除した場合、SSL証明書バインディングはまだそこにありますか?