【问题标题】:Load SSL dynamically with code使用代码动态加载 SSL
【发布时间】:2012-12-26 22:01:48
【问题描述】:

到目前为止,我的问题是纯粹的理论问题。 我想做一个支持多个站点的 CMS。

到目前为止我无法弄清楚的问题是: 如何从代码隐藏中附加 https 协议的 ssl 证书,而不是通过托管接口或 iis 本身附加它(主要问题是我希望每个站点都有不同的 ssl 证书,而不是将它们分组到一个证书,最多允许 5 个域,并且仍然会说它们是同一个实体)

【问题讨论】:

  • 您愿意在不同的端口上运行每个站点吗?
  • 我会将 CMS 应用程序与 SSL 分开(对我来说,这是一个部署问题)。请记住 SSL 证书过期。你会管理它吗?
  • 我可以通过某种警报系统来管理它们,如果我能让它们首先工作的话。至于多端口/IP 解决方案,我相信这会在设置中造成很多复杂性,并且需要我有专门的主机(我在早期阶段不愿意这样做)
  • 对 SSL 的担忧最好留到拥有专用主机之后。假设您有专用主机,那么 SSL 证书将分配给映射到 IP 的域。您的代码永远不需要知道有关您的证书的任何信息,只需要知道您是否需要为站点的每个功能使用 SSL。例如,在 MVC 中,您将使用 [RequireHttps] 属性来指示某个操作只能通过 SSL 获得。

标签: asp.net security ssl


【解决方案1】:

这在 ASP.NET 级别上无法解决。

原因是对于 HTTPS 请求,SSL 握手(提供证书的地方)是在客户端发送 HTTP 请求之前执行的,您可以从中了解域。

唯一的例外是 TLS 中的 server-name-indication 扩展,它允许客户端在 SSL 请求中指定所需的域。但是许多客户端不支持此扩展,并且它不存在于仍在使用的 SSL3 协议版本中。即使有了这个扩展,决定出示哪个证书的还是 SSL 服务器。

【讨论】:

    【解决方案2】:

    正如 Eugene 所说,管理 SSL 证书超出了 ASP.Net 的级别;但是,您可以创建某种形式的管理例程来执行 IIS7(及更高版本)AppCmd.exe 的命令行工具来管理证书:

    ie(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 命名空间也可能派上用场。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      相关资源
      最近更新 更多