到目前为止,我的问题是一个纯粹的理论问题。我想制作一个支持多个站点的 CMS。
到目前为止我无法弄清楚的问题是:如何从代码隐藏中附加 https 协议的 ssl 证书,而不是通过托管接口或 iis 本身附加它(主要问题是我想为每个站点使用不同的 ssl 证书,而不是将它们分组在一个证书上,最多允许 5 个域,并且仍然会说它们是同一个实体)
这在 ASP.NET 级别上无法解决。
原因是对于 HTTPS 请求,SSL 握手(提供证书的地方)是在客户端发送 HTTP 请求之前执行的,您可以从中了解域。
唯一的例外是 TLS 中的 server-name-indication 扩展,它允许客户端在 SSL 请求中指定所需的域。但是许多客户端不支持此扩展,并且它不存在于仍在使用的 SSL3 协议版本中。即使有了这个扩展,决定出示哪个证书的还是 SSL 服务器。
正如 Eugene 所说,管理 SSL 证书超出了 ASP.Net 的级别;但是,您可以创建某种形式的管理例程来执行 IIS7(及更高版本)AppCmd.exe 的命令行工具来管理证书:
即(shell命令--安全权限很重要):appcmd.exe set config -section:system.applicationHost/sites /+"[name='Default Web Site'].bindings.[protocol='https',bindingInformation=' *:443:']" /commit:apphost
System.Security.Cryptography.X509Certificates.X509Certificate 命名空间也可能派上用场。