На сервере Windows 2012 мы создаем веб-сайты, используя код C #. Это также относится к привязке https с SSL.
По какой-то причине всякий раз, когда создается новый сайт, он устанавливает все SSL-сертификат сайтов на "Не выбран" Есть ли способ предотвратить это?
Код, который мы используем
//get the server manager instance
using (ServerManager mgr = new ServerManager())
{
SiteCollection sites = mgr.Sites;
Site site = mgr.Sites[siteName];
if (site != null)
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.WorkingDirectory = @"C:\Windows\System32\Inetsrv";
startInfo.FileName = "appcmd.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = string.Format("set site /site.name:\"{0}\" /+bindings.[protocol='https',bindingInformation='{1}:443:{2}']", siteName, ipAddress, hostHeader);
using (Process exeProcess = Process.Start(startInfo))
{
exeProcess.WaitForExit();
return true;
}
}
else
throw new Exception("Site: " + siteName + " does not exist.");
}
Предполагая, что appcmd взаимодействует с IIS8 точно так же, как с IIS7 (еще не разбирался с ним), ответ будет Нет.
Прекращение действия SSL обрабатывается в стеке HTTP до того, как запрос достигнет IIS. По этой причине назначение сертификата конечной точке обрабатывается ОС, а не IIS. appcmd.exe
обновляет только файлы конфигурации IIS, он не взаимодействует с зависимостями ОС, такими как назначение сертификата.
Когда вы используете appcmd set site
вы фактически сбрасываете / перезаписываете предыдущую конфигурацию сайта.
Чтобы обновить сопоставления сертификатов и конечных точек, вам необходимо использовать netsh.exe
как указано в: https://stackoverflow.com/questions/591597/how-to-assign-a-ssl-certificate-to-iis7-site-from-command-prompt
netsh http add sslcert ipport=0.0.0.0:443 certhash=baf9926b466e8565217b5e6287c97973dcd54874 appid={ab3c58f7-8316-42e3-bc6e-771d4ce4b201}
где baf9926b466e8565217b5e6287c97973dcd54874
это отпечаток сертификата, и 0.0.0.0:443
конечная точка IP (0.0.0.0
означает то же, что и "Любой неназначенный")
ОБНОВИТЬ: Если вы всегда используете существующие конечные точки для привязок HTTPS (например, всегда «Any Unassigned»: 443), я считаю, что вы могли бы успешно решить эту проблему, создав резервную копию следующего ключа реестра (включая подключи):
HKLM\SYSTEM\CurrentControlSet\services\HTTP\Parameters\SslBindingInfo
Запишите его обратно в реестр после запуска appcmd set site