.NET MVC实现SSL(https)加密传输全程攻略

  HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTPS,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

  为了保证敏感数据的传输安全,我们在.net MVC开发的站点引入SSL加密。

 

  如何在代码里实现?

  网上说了很多关于.net MVC使用https安全传输的方法,我都一一试过,遇到各种问题。后来参考国外一些文章,发现其实很简单:只要在Global.asax.cs中的RegisterGlobalFilters方法里添加一个RequireHttpsAttribute的Filter就OK!

1         public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
2             filters.Add(new HandleErrorAttribute());
3             filters.Add(new RequireHttpsAttribute());
4         }

  这样设置后,整个站点都会被强迫使用https连接访问。

  关于在发布到IIS前如何在本地使用https调试,参考Working with SSL at Development Time is easier with IISExpress,温馨提醒:必须装VS2010 SP1。

 

  如何在IIS上部署?

  为支持 SSL 通信,必须为 Web 服务器配置 SSL 证书。

  我的服务器环境:Windows 2003 Server SP2,IIS 6.0。其他版本操作系统和IIS设置会有所不同。

 

  一.安装证书服务

  要想使用SSL安全机制功能,首先必须为Windows Server 2003系统安装证书服务。

  进入“控制面板”,运行“添加或删除程序”,接着进入“Windows组件向导”对话框,勾选“证书服务”选项,点击“下一步”按钮,接着选择CA类型。这里选择“独立根CA”,点击“下一步”按钮,为自己的CA服务器取个名字,设置证书的有效期限,最后指定证书数据库和证书数据库日志的位置,就可完成证书服务的安装。

 

  二.生成证书申请

1.启动 IIS Microsoft 管理控制台 (MMC) 管理单元。
2.展开 Web 服务器名,选择要安装证书的 Web 站点。
3.右键单击该 Web 站点,然后单击“属性”。
4.单击“目录安全性”选项卡。
5.单击“安全通信”中的“服务器证书”按钮,启动 Web 服务器证书向导。
注意:如果“服务器证书”不可用,可能是因为您选择了虚拟目录、目录或文件。返回第 2 步,选择 Web 站点。
6.单击“下一步”跳过欢迎对话框。
7.单击“创建一个新证书”,然后单击“下一步”。
8.该对话框有以下两个选项:
• “现在准备申请,但稍后发送”
  该选项总是可用的。
• “立即将申请发送到在线证书颁发机构”
仅当 Web 服务器可以在配置为颁发 Web 服务器证书的 Windows 2003 域中访问一个或多个 Microsoft 证书服务器时,该选项才可用。在后面的申请过程中,您有机会从列表中选择将申请发送到的颁发机构。
单击“现在准备申请,但稍后发送”,然后单击“下一步”。
9.在“名称”字段中键入证书的描述性名称,在“位长”字段中键入密钥的位长,然后单击“下一步”。
向导使用当前 Web 站点名称作为默认名称。它不在证书中使用,但作为友好名称以助于管理员识别。
10.在“组织”字段中键入组织名称(例如 aabbcc),在“组织单位”字段中键入组织单位(例如“销售部”),然后单击“下一步”。 
注意:这些信息将放在证书申请中,因此应确保它的正确性。CA 将验证这些信息并将其放在证书中。浏览您的 Web 站点的用户需要查看这些信息,以便决定他们是否接受证书。
11.在“公用名”字段中,键入您的站点的公用名,然后单击“下一步”。
重要说明:公用名是证书最后的最重要信息之一。它是 Web 站点的 DNS 名称(即用户在浏览您的站点时键入的名称)。如果证书名称与站点名称不匹配,当用户浏览到您的站点时,将报告证书问题。
如果您的站点在 Web 上并且被命名为 www.aabbcc.com,这就是您应当指定的公用名。
如果您的站点是内部站点,并且用户是通过计算机名称浏览的,请输入计算机的 NetBIOS 或 DNS 名称。
12.在“国家/地区”、“州/省”和“城市/县市”等字段中输入正确的信息,然后单击“下一步”。
13.输入证书申请的文件名。
该文件包含类似下面这样的信息。

-----BEGIN NEW CERTIFICATE REQUEST-----
MIIDZjCCAs8CAQAwgYoxNjA0BgNVBAMTLW1penJvY2tsYXB0b3Aubm9ydGhhbWVy...
-----END NEW CERTIFICATE REQUEST-----

这是您的证书申请的 Base 64 编码表示形式。申请中包含输入到向导中的信息,还包括您的公钥和用您的私钥签名的信息。 
将此申请文件发送到 CA。然后 CA 会使用证书申请中的公钥信息验证用您的私钥签名的信息。CA 也验证申请中提供的信息。
当您将申请提交到 CA 后,CA 将在一个文件中发回证书。然后您应当重新启动 Web 服务器证书向导。
14.单击“下一步”。该向导显示证书申请中包含的信息概要。

15.单击“下一步”,然后单击“完成”完成申请过程。
证书申请现在可以发送到 CA 进行验证和处理。当您从 CA 收到证书响应以后,可以再次使用 IIS 证书向导,在 Web 服务器上继续安装证书。

 

三.提交证书申请

1.使用“记事本”打开在前面的过程中生成的证书文件,将它的整个内容复制到剪贴板。
2.启动 Internet Explorer,导航到 http://hostname/CertSrv,其中 hostname 是运行 Microsoft 证书服务的计算机的名称,一般为localhost。
3.单击“申请一个证书”,然后单击“下一步”。
4.在“选择申请类型”页中,单击“高级申请”,然后单击“下一步”。
5.在“高级证书申请”页中,单击“使用 Base64 编码的 PKCS#10 文件提交证书申请”,然后单击“下一步”。
6.在“提交一个保存的申请”页中,单击“Base64 编码的证书申请(PKCS #10 或 #7)”文本框,按住 CTRL+V,粘贴先前复制到剪贴板上的证书申请。 
7.在“证书模板”组合框中,单击“Web 服务器”。
8.单击“提交”。
9.关闭 Internet Explorer。

 

四.颁发证书

1.从“管理工具”程序组中启动“证书颁发机构”工具。
2.展开您的证书颁发机构,然后选择“挂起的申请”文件夹。
3.选择刚才提交的证书申请。 
4.在“操作”菜单中,指向“所有任务”,然后单击“颁发”。
5.确认该证书显示在“颁发的证书”文件夹中,然后双击查看它。
6.在“详细信息”选项卡中,单击“复制到文件”,将证书保存为 Base-64 编码的 X.509 证书。
7.关闭证书的属性窗口。
8. 关闭“证书颁发机构”工具。

 

五.在IIS上安装证书

1.如果 IIS尚未运行,则启动它。
2.展开您的服务器名称,选择要安装证书的 Web 站点。
3.右键单击该 Web 站点,然后单击“属性”。
4.单击“目录安全性”选项卡。
5.单击“服务器证书”启动 Web 服务器证书向导。
6.单击“处理挂起的申请并安装证书”,然后单击“下一步”。
7.输入包含 CA 响应的文件的路径和文件名,然后单击“下一步”。
8.检查证书概述,单击“下一步”,然后单击“完成”。

 

六.将站点配置为SSL访问

1.如果 IIS尚未运行,则启动它。
2.展开您的服务器名称和 Web 站点。(这必须是已安装证书的 Web 站点)
3.右键单击某个虚拟目录,然后单击“属性”。
4.单击“目录安全性”选项卡。
5.单击“安全通信”下的“编辑”。
6.单击“要求安全通道 (SSL)”。
  现在客户端必须使用 HTTPS 浏览到此虚拟目录。
7.单击“确定”,然后再次单击“确定”关闭“属性”对话框。

OK!基本完成目标。现在可以使用https://xxx.xxx.xxx:xxx来访问你的站点了。

 

 

本文部分内容参考:

http://czy4411741.blog.163.com/blog/static/342031272009020330935/

http://bbs.51cto.com/thread-16155-1-1.html

posted @ 2012-05-09 11:22  GH9th  阅读(7471)  评论(3编辑  收藏  举报