分类
知识中心

如何利用数字证书实现的安全SSL访问(二)

要解决一个问题,就要发挥刨根问底的精神,把问题彻底解决。这里使用了第三方程序集WebPageSecurity.dll来协助解决SSL的这个问题。下载地址为http://www.codeproject.com/KB/ aspnet/WebPageSecurity/WebPageSecurity_Src.zip。需要注意的是,输入The Code Project网站(http://www.codeproject.com/)的注册账号之后才能下载。

具体的实现步骤如下。

(1)首先将程序集添加到Bin文件夹。编译项目文件包WebPageSecurity,就可以获得WebPageSecurity.dll了。即添加WebPageSecurity.dll到Bin文件夹。

(2)配置Web.Config。在<configSections>节点下加入以下配置:

  1. <section name=”secureWebPages” type=”Ventaur.
    Web.Security.Configuration.SecureWebPageSettings,
    WebPageSecurity”/>

在<configuration>节点下加入以下配置:

  1. 01:  <secureWebPages mode=”RemoteOnly”
    ignoreHandlers=”WithStandardExtensions”>
  2. 02:     <files>
  3. 03:         <add path=”Login.aspx” />
  4. 04:         <add path=”Legal/Privacy.aspx” />
  5. 05:         <add path=”Legal/Copyright.aspx” secure=”Ignore” />
  6. 06:     </files>
  7. 07:     <directories>
  8. 08:         <!–<add path=”/” recurse=”True” />–>
  9. 09:         <add path=”Admin” recurse=”True” />
  10. 10:         <add path=”Admin/Info/” secure=”Insecure” />
  11. 11:     </directories>
  12. 12:  </secureWebPages>

在上面的代码中,第1行加入secureWebPages配置节点。第2行给具体的页面文件使用SSL加密,默认情况是使用SSL。第5行配置不需要SSL加密的页面,secure=”Ignore”表示忽略此页面使用SSL加密。第7行给文件夹下的所有文件使用SSL加密。第10行配置不需要SSL加密的文件夹,secure=”Ignore”表示忽略此文件夹下的所有文件,使用SSL加密。

小知识:Mode值。Mode值主要有以下4种选择情况,分别是On(Default),RemoteOnly,LocalOnly,Off。其中,On(Default)表示来自各个方向的请求使用SSL;RemoteOnly表示来自于远程客户的请求使用SSL网站部署到服务器上;LocalOnly表示在本地调试时使用;Off表示SSL不可用。

(3)添加Module到Application。在<httpModules>节点下加入以下配置:

  1. <add name=”WebPageSecurity”
  2.  type=”Ventaur.Web.Security.
    SecureWebPageModule, WebPageSecurity” />

(4)新建基类BasePage.cs,让所有的ASPX页面继承于BasePage类。

当然,在实际测试过程中,总会遇到这样或那样的麻烦。下面就是测试过程中遇到的一个典型问题。在一台机器上配置好了SSL,由于项目中用到了WebPageSecurity(一个HTTP/HTTPS自动切换的httpmodule),所以在web.config文件中做了相应的设定。弄完后,测试页面,页面没有自动切换。郁闷啊,当时耗费了将近半天时间。

最后检查web.config中的配置发现,把<httpmodules>遗漏了。一查,web.config这个文件里根本没有<httpmodules>的配置,至此,原因终于大白。

通过上述测试,无需在IIS上对每个页面进行配置,SSL加密页面与非SSL页面就可以自动转换了。尤其是对于有大量SSL页面的时候,上面的解决方案可供选择。当我们在网络上轻松游走于各大银行网站的时候,适当想想这些背后的代码方案,还是挺有意思的。原来,安全随时就在我们身边,风景也随时就在我们身边,只是我们的生活太匆忙而忽略了!