在 Win 2012 中绑定 SSL 证书重置

在 Win 2012 中绑定 SSL 证书重置

在 Windows 2012 服务器上,我们使用 C# 代码创建网站。这也适用于带 SSL 的 https 绑定。

由于某种原因,每当创建新网站时,它都会设置全部网站的 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 终止在请求到达 IIS 之前在 HTTP 堆栈中处理。因此,证书到端点的分配由操作系统处理,而不是由 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

相关内容