我通过 APPCMD 发现,大多数 IIS7 配置都可以通过命令行进行。有一件事我还没搞清楚该怎么做:在 IIS 管理器中,绑定 -> 编辑 -> 选择 SSL 证书。
“appcmd set site /site.name:foo /?”列出了 2 个以“bindings”开头的键(“protocol”、“bindingInformation”),但我还没有发现它们是什么。
其他地方建议“netsh”可以做到这一点,但“netsh http show sslcert”显示我的证书绑定到“0.0.0.0:443”而不是特定的 IIS7 站点。
假设我知道某个站点的 IIS7 名称/ID 以及我的证书的哈希值(这已经是此处其他站点的证书),是否有任何方法可以从命令行将其设为另一个 IIS7 站点的 SSL 证书?
更新:我在 UI 中执行了此操作,并对注册表进行了差异处理,发现 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\SslBindingInfo\0.0.0.0:443(也在 ControlSet0001 中)是使用我的 SslCertHash 创建的,并且 AppId 看起来就像“netsh http show sslcert”打印的 UUID,但每个部分都是反向的(81e1c34d4be121...)。我想我读到过这是这IIS 应用程序的 AppId,但我不确定。当我在 IIS 管理器中删除站点并切换到使用此 SSL 证书的另一个站点时,它在注册表中不会发生变化。无论如何,这看起来netsh
提供的粒度级别相同,所以我真的不知道 IIS 管理器从哪里获得其每个站点绑定 SSL 证书分配。
答案1
需要指出的是,这与 IIS6 及更早版本不同。在 IIS 6 中,元数据库包含套接字、与套接字关联的证书哈希等。在 7 中,IIS 配置仅包含一个套接字 (abcd:443),并让操作系统负责该套接字上的证书管理内容。(通过 GUI,它的设计大致与以前一样)。规则是:您只能将一个证书绑定到一个套接字。
互联网信息服务:
在 IIS 7 中,IIS 实际上并不关心证书绑定。我知道,有点惊讶,对吧?
在 IIS7 中,所有 IIS 配置都只是将 IIS 绑定到特定套接字(IP + 端口)。就是这样。当您不需要在每个设备上唯一化证书哈希时,可以使配置在各个设备之间更具可移植性。
IIS 配置使用以下方式管理亚太经合组织或者{在此处插入选择的 IIS 7 管理工具},通过为站点创建到套接字的绑定。
操作系统:
OS 层接管 SSL 部分的控制,因此您使用 NETSH 将证书与特定套接字关联。
这是通过网信。
Sukesh 很久以前就发布了关于这两方面的指南,现在仍然有效: https://stackoverflow.com/questions/591597/how-to-assign-a-ssl-certificate-to-iis7-site-from-command-prompt