让我们首先看看使用SSL的性能开销。在Stackoverflow上有几个关于这个主题的好问题,在这里和在这里。年长的研究似乎指向一个合理的开销,但最近更有趣轶事指向相反方向。一般来说,使用当前的现代硬件应该不会对性能产生太大的影响,但是,对于大型繁忙站点,在负载测试中包含SSL总是一个好主意。
SSL证书的定价也不应该是一个问题。如果你的预算真的很低,有很多免费SSL提供商可用。当然,这取决于您正在处理的站点的重要性,因为您可能不想使用免费证书。
现在,对于这篇文章的主题:如何为你的DotNetNuke网站设置一个安全的登录。本攻略主要基于特洛伊·亨特的一篇博客文章,面向。net开发者的OWASP十大建议,第9部分:传输层保护不足。在这篇文章中Troy非常详细地解释了仅仅有一个安全的(SSL)登录是不够的,但是所有后续的请求也需要是安全的,否则在某些情况下(比如不安全的WiFi连接)认证cookie仍然可以被劫持。
幸运的是,ASP。NET为此提供了一个非常简单的解决方案:修改web中的表单身份验证设置。配置要求SSL用于身份验证cookie。一旦这样做,身份验证cookie将不再通过不安全的(HTTP)连接发送。这意味着您只能通过SSL连接登录到站点,一旦您更改回非SSL连接,您将自动注销。
为了设置这为您的DotNetNuke网站,你必须改变:
<身份验证模式= "形式" >
< name = "形式。DOTNETNUKE" protection="All" timeout="60" cookies =" useccookies " />
> < /认证
在此:
<身份验证模式= "形式" >
< name = "形式。DOTNETNUKE" protection="All" timeout="60" cookies =" useccookies " requireSSL= " true " />
> < /认证
这意味着从现在开始,只有在传输层安全的情况下才会发送所有身份验证cookie。所以不要马上做这个改变,因为这样做会阻止你登录!首先,您必须准备DotNetNuke以使用仅SSL登录。
步骤1:在IIS中为您的网站启用SSL
我不打算在这里解释它,因为这是IIS中非常常见的过程。看到在这里了解更多关于如何做的信息。
步骤2:在DotNetNuke中为您的站点启用SSL
DotNetNuke提供了一种全面的方法来启用和强制每个网站(门户)的SSL。对于此任务,为站点启用SSL就足够了。为了做到这一点,转到Admin >站点设置,到高级选项卡,然后打开SSL设置部分。在本节中,选中“启用SSL ?”选项。,并更新设置。

步骤3:创建一个安全的登录页面
默认情况下,自动生成的登录页面(或弹出)为DotNetNuke是不安全的。为了提供一个安全的登录选项,您将不得不创建一个单独的页面,其中有一个帐户登录模块,并被标记为安全。虽然您可以在每个级别创建此页面,并给它任何名称,但最合乎逻辑的是在根级别创建此页面,并给它命名为“Login”。虽然DotNetNuke会自动处理一切,一旦你做了每一个必要的调整,它让我安心,知道你正在覆盖登录页面的自动URL。
总的来说,新的登录页面需要设置这些属性:
- 页面名称:Login
- 根级别(没有父页面)
- 权限:查看所有用户(或未经身份验证的用户)的权限
- 安全:必须设置安全标志(这将确保页面只能使用HTTPS协议查看,DotNetNuke会自动切换到HTTPS)

步骤4:使用新的登录页面
没有“告诉”DotNetNuke使用这个新的登录页面,它将继续使用自动登录选项。登录页面是一个所谓的特殊页面,这意味着这个页面的位置存储在每个站点上,可以被任何模块或扩展中的任何其他进程使用。要更改特殊的登录页面,请转到Admin >站点设置,打开“高级设置”选项卡,并选择页面管理部分。在本节中,在“登录页面”选择您新创建的登录页面,并更新设置。

步骤5:启用RequireSSL
打开网络。并将Forms Authentication节点更改为如下所示:
<身份验证模式= "形式" >
< name = "形式。DOTNETNUKE" protection="All" timeout="60" cookies =" useccookies " requireSSL= " true " />
> < /认证
警告
这里有一个很大的警告。由于表单认证Cookie设置是在应用程序级别完成的,在web。此解决方案假设您在DotNetNuke中只配置了一个站点,或者所有站点都可以使用应用于IIS网站的SSL证书进行保护。这意味着您可能必须对一个IIS网站应用多个SSL证书。
SSL证书通常只对一个域有效,或者对一个域及其所有子域(即所谓的子域)有效通配符SSL证书)。或者您可以获得多个不相关域的证书(即所谓的(UCC或SAN证书)。不过,最好的解决办法是在地下运行Windows 2012支持服务器名称指示(SNI),它允许您将多个SSL证书应用于一个网站(使用不同的主机头)。这是另一篇博客文章的素材!
最后的评论
为经过身份验证的用户保护站点是多么重要,这一点我再怎么强调也不为过。我喜欢看他的博客文章特洛伊狩猎因为他总是让我惊讶,侵犯别人的隐私是多么容易,闯入其他网站是多么容易。保护你的网站只是一个小的,但重要的一步,朝着一个更安全的网络的目标。
由于有很多SSL提供程序甚至提供免费的SSL证书,实际上没有人应该有正当理由不开始使用一个。
(这篇文章是从我的个人博客上交叉发布的)