Назад | Перейти на главную страницу

Сброс привязки 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.");
            }

Предполагая, что 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