Обязательный сброс SSL-сертификата в Win 2012
На сервере 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.");
}
1 ответ
Предполагая, что 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 (например, всегда "Любой неназначенный":443), я считаю, что вы могли бы успешно решить эту проблему, создав резервную копию следующего ключа реестра (включая подразделы):
HKLM\SYSTEM\CurrentControlSet\services\HTTP\Parameters\SslBindingInfo
Запишите его обратно в реестр после запуска appcmd set site