SSL 安全网站最佳实践

Posted

技术标签:

【中文标题】SSL 安全网站最佳实践【英文标题】:SSL-secured website best practices 【发布时间】:2010-10-17 08:47:42 【问题描述】:

我有一个使用 SSL 证书保护的网站 (www.mydomain.com)。这是一个 ASP.NET 网站,我通过代码强制要求某些页面使用 https:// 前缀。如果他们不这样做,它会将他们重定向到 https:// 等价物。这是一个好习惯吗?有没有更简单的方法来做到这一点?并非每个页面都需要 SSL。

此外,当用户以 mydomain.com 的形式而不是 www.mydomain.com 使用我的 URL 时,他们会收到证书错误,因为证书是为 www.mydomain.com 注册的。我应该使用与上面提到的 http:// 和 https:// 问题相同的方法吗?还是有更好的处理方法?

【问题讨论】:

【参考方案1】:

你的方法听起来不错。在我当前的项目中,当用户进入我的登录页面时,我强制使用 HTTPS(基于一个配置标志,它允许我在本地进行测试而无需处理需要证书)。这使我可以访问其他不安全的页面,这很方便。

我有几个地方让我们的服务器抓取其他页面的输出(例如,将 html 渲染为 PDF 并获取动态图像)。由于我们的环境,我们的服务器无法解析它的公共名称,所以如果我们在网站上强制使用 ssl,我们必须添加我们的内部 IP 地址(或伪造域名)。

至于您的第二个问题,您有两种选择来处理 www.example.com 与 example.com。您可以购买允许您拥有多个域名的证书。这些被称为 UCC 证书。

您的第二个选择是将 example.com 重定向到 www.example.com 或其他方式。如果希望您的内容被谷歌或​​其他搜索引擎索引,重定向是一个很好的选择。因为他们会将 www.example.com 和 example.com 视为两个单独的站点。这意味着指向您网站的链接将被拆分,从而降低您的整体网页排名。

【讨论】:

是的,我采用相同的方法。我的 web.config 文件中有一个 EnableSsl 密钥,我可以根据我所处的环境关闭和打开它。我还有一个管道分隔的 SecurePages 密钥,我可以轻松地添加/删除网站。 另一种代替管道分隔的方法(假设您在部署后不需要更改它)是定义一个进行检查的基本页面,然后您想要保证安全的任何页面将始终继承从那个页面。你也可以使用属性。 是的,但我宁愿保留一个基本页面,并且我希望能够在不重新编译的情况下将页面动态设置为 ssl。【参考方案2】:

您可以将 IIS 中的站点配置为需要证书,但这会 A) 如果有人没有使用 https 访问,并且 B) 要求所有页面都使用 https,则会生成错误。所以,那个是行不通的。您可以在 IIS 上放置一个过滤器,检查所有请求并将它们重定向为 https 调用(如果它们在您的加密列表中)。这里明显的缺点是每次添加新页面(例如,来自 XML 文件或数据库)时都需要更新页面列表并重新启动过滤器。

我认为您在需要 https 的页面中构建代码可能是正确的,如果它们通过 http 到达,则会重定向到 https 版本。就您的证书错误而言,您可以使用完整路径(包括 www)而不是相对路径重定向来解决此问题。如果您对如何检测调用是否使用 https 或如何获取当前请求的完整路径有任何疑问,请告诉我。两者都非常简单,但如果您需要,我有示例代码。

更新 - Josh,处理多个子域的证书称为通配符证书。问题是它们比标准证书贵很多。

更新 2:要考虑的另一件事是为需要 SSL 的页面使用母版页或派生类。这样,您不必在每个页面中复制代码,只需将其声明为 SSLPage 类型(或使用相应的母版页)并让 Master/Parent 类处理重定向。同样,如果您采用这种方法,您将需要进行一些 URL 处理,但这非常简单。

【讨论】:

感谢您的意见。我已经在检测 http:// 和 https://,所以这不是问题。我将不得不尝试检查 www。因为 url 在我的开发机器上不会有那个。有什么建议吗? 现在标记它们被称为 UCC 证书。通配符不同。 Godaddy 提供的可支持 5 个域的 UCC 为 89 美元/年。 Mike:将 www.localhost 条目添加到您的主机文件中。这将让您测试您的 www。逻辑:-) Josh - UCC 与通配符不同吗?我的支持人员现在这样做了,但我认为他仍然称它们为通配符 - 而我们的支持让我们拥有任意数量的子域。无论如何,这是有价值的东西,谢谢!【参考方案3】:

以下内容可以帮助您:

如果可以使用 https:// 显示您的所有网站页面,那么您可以简单地更新您的代码以使用 https:// 并在 IIS 中设置两个绑定。一个用于http,另一个用于https。这样,您的网站就可以通过任何协议访问。 您的访问者收到名称不匹配错误,因为您的 SSL 证书中使用的通用名称是 www.mydomain.com。 Namecheap 提供 RapidSSL 证书,您可以通过它在单个 SSL 下保护两个名称。您可以为 www.mydomain.com 购买此 SSL,它会自动保护 mydomain.com(即没有 www)。

另一种选择是您可以编写代码将访问者重定向到 www.mydomain.com 网站,即使他们浏览了 mydomain.com。

【讨论】:

以上是关于SSL 安全网站最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

让自己网站的https更安全

HTTPS 安全最佳实践之SSL/TLS部署

有助于提高网站性能的SSL/TLS优化方法

SSL证书真的能保障网站安全吗?

SSL证书的工作原理是怎么样的?

如何启用SSL安全证书