Обязательный сброс 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

Другие вопросы по тегам