在Win 2012中绑定SSL证书重置

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

出于某种原因,每当一个新的网站被创build,它将所有网站的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与IIS7的交互方式与IIS7完全相同(还没有涉及到它),答案是否定的

在请求到达IIS之前,SSL终止在HTTP堆栈中处理。 出于这个原因,证书到端点的分配由操作系统处理,而不是由IIS处理。 appcmd.exe只更新IISconfiguration文件,它不会与操作系统依赖关系(如证书分配)交互。

当您使用appcmd set site您正在有效地重置/覆盖以前的网站configuration。

要更新证书到端点映射,您需要使用netsh.exe如下所示: https : netsh.exe -命令提示符

 netsh http add sslcert ipport=0.0.0.0:443 certhash=baf9926b466e8565217b5e6287c97973dcd54874 appid={ab3c58f7-8316-42e3-bc6e-771d4ce4b201} 

其中baf9926b466e8565217b5e6287c97973dcd54874是证书指纹, 0.0.0.0 baf9926b466e8565217b5e6287c97973dcd54874是IP端点( 0.0.0.0表示与“任何未分配”相同)

更新:如果你总是使用HTTPS绑定的现有terminal(例如,总是“任何未分配”:443),我相信你可以通过备份下面的registry项(包括子项)来成功解决这个问题:

 HKLM\SYSTEM\CurrentControlSet\services\HTTP\Parameters\SslBindingInfo 

运行appcmd set site后,将其重新写回registry