妙用SSL给IIS加把锁

由于NT系统的易维护性,越来越多的中小企业在自己的网站上和内部办公管理系统上采用它,而且很多都是用默认的IIS来做WEB服务器使用。当然不能否认近来威胁NT系统的几个漏洞都是由于IIS配置不当造成的,而且可以预见,未来IIS还会被发现很多新的漏洞和安全问题,但只要我们做好合理的安全配置,还是可以避免很多安全隐患的。本文并没有系统的去讲如何全面安全的配置IIS,我只是从利用SSL加密HTTP通道来讲如果加强IIS安全的。

一、建立SSL安全机制

IIS的身份认证除了匿名访问、基本验证和Windows NT请求/响应方式外,还有一种安全性更高的认证,就是通过SSL(Security Socket Layer)安全机制使用数字证书。SSL(加密套接字协议层)位于HTTP层和TCP层之间,建立用户与服务器之间的加密通信,确保所传递信息的安全性。SSL是工作在公共密钥和私人密钥基础上的,任何用户都可以获得公共密钥来加密数据,但解密数据必须要通过相应的私人密钥。使用SSL安全机制时,首先客户端与服务器建立连接,服务器把它的数字证书与公共密钥一并发送给客户端,客户端随机生成会话密钥,用从服务器得到的公共密钥对会话密钥进行加密,并把会话密钥在网络上传递给服务器,而会话密钥只有在服务器端用私人密钥才能解密,这样,客户端和服务器端就建立了一个惟一的安全通道。

建立了SSL安全机制后,只有SSL允许的客户才能与SSL允许的Web站点进行通信,并且在使用URL资源定位器时,输入https:// ,而不是http://

简单的说默认情况下我们所使用的HTTP协议是没有任何加密措施的,所有的消息全部都是以明文形式在网络上传送的,恶意的攻击者可以通过安装监听程序来获得我们和服务器之间的通讯内容。这点危害在一些企业内部网络中尤其比较大,对于使用HUB的企业内网来说简直就是没有任何安全可讲因为任何人都可以在一台电脑上看到其他人在网络中的活动,对于使用交换机来组网的网络来说虽然安全威胁性要小很多,但很多时候还是会有安全突破口,比如没有更改交换机的默认用户和口令,被人上去把自己的网络接口设置为侦听口,依然可以监视整个网络的所有活动。

所以全面加密整个网络传输隧道的确是个很好的安全措施,很可惜的是现在网络上有关于具体给IIS配置SSL的文章并不是很多,我简单的摸索了下把我的经验拿出来给大家分享。

二、操作办法

以WIN2000服务器版本的来做例子讲解的,我们首先需要在控制面板里的添加/删除WINDOWS组件中去安装证书服务,这个服务在默认安装中是没有安装在系统里的,需要安装光盘来安装。





然后选择独立根CA的安装类型。然后在下一步中给自己的CA起一个名字来完成安装就可以了。

安装完成后,我们就可以启动我们的IIS管理器来申请一个数字证书了,启动INTERNET管理器选择我们需要配置的WEB站点:



选择站点属性里的,目录安全性-安全通信-服务器证书



由于我们是第一次配置,所以选择创建一个新的证书。



用默认的站点名称和加密位长设置就可以了。







其实上面的设置都是非常简单的,看看我抓的几个设置画面就可以很简单的设置好的,最好选择一个地方把我们刚才生成的一个请求证书保存起来。



完成上面的设置后,我们就要把我们刚刚生成的服务器证书提交给我们刚刚在本地安装的证书服务器。在默认情况下证书服务器完成安装后会在本地的IIS里的WEB服务器里面生成几个虚拟的目录。

我们打开http://localhost/CertSrv/default.asp



选择申请证书



在选择申请类型的时候,选择高级申请。



选择使用base64的编码方式来提交我们的证书申请。



在证书申请的地方把我们刚刚生成的certreq.txt的内容拷备进去,然后选择提交。



提交成功以后,会返回一个页面给我们告诉我们证书已经成功提交了,现在是挂起状态就是等待CA中心来颁发这个证书了。

好接下来启动管理工具里的证书颁发机构,在待定申请中找到我们刚刚的申请条目然后点击鼠标右键选择颁发就好了。



颁发成功以后我们在颁发的证书里找到刚才颁发的证书,双击其属性栏目然后在详细信息里选择将证书复制到文件。





我们需要把证书导出到一个文件,这里我们把证书导出到c:\sql.cer这个文件里。

重新回到IIS的WEB管理界面里重新选择证书申请,这个时候出来的界面就是挂起的证书请求了。





选择我们导处的sql.cer这个文件。



确定一切信息正确以后,就可以点击下一步确定来完成SSL的安装了。



默认安装结束后,IIS网站这时还没有启用SSL安全加密功能,我们需要手动启动它:选择需要加密访问的站点目录,右键单击打开属性页,在“目录安全性”标签页,点击安全通信栏的“编辑”按钮,选中“要求安全通道(SSL)”和“要求128位加密”选项,最后点击“确定”按钮即可。其他选项说明如下:

忽略客户证书:可以使用“http”和“https”访问服务器。当使用“https”访问服务器时,只在客户与服务器之间建立加密通道,保证数据传输安全,只对服务器身份进行验证,不提示用户出示客户证书,不对客户用户身份进行验证。  
  
接受客户证书:可以使用“http”和“https”访问服务器。当使用“https”访问服务器时,在客户与服务器之间建立加密通道,保证数据传输安全,对服务器身份进行验证,同时提示用户出示客户证书,用户没有证书也可以登录系统(可以在程序代码中判断用户证书序列号从而验证用户身份)。选择此项需要将根证书安装到服务器的本地计算机,否则在提示用户选择客户证书的证书列表框内找不到客户证书。
  
申请客户证书:只能使用“https”访问服务器。当使用“https”访问服务器时,在客户与服务器之间建立加密通道,保证数据传输安全,对服务器身份进行验证,同时提示用户出示客户证书,用户没有证书不能登录系统。选择此项需要将根证书安装到服务器的本地计算机,否则在提示用户选择客户证书的证书列表框内找不到客户证书。
  
如果需要用户证书认证等高级功能,还可以选择启用客户证书映射,把特定证书映射为windows用户帐户。



确定HTTPS使用的端口是443 。



第一次通过HTTPS进入站点的时候,会有一个对话框让我们确认是否同意当前证书,当然是同意啦~



好了,这个时候我们看这个网站的时候所有信息在网上就是以加密的方式来传送的了,任何人都无法再轻易了解其中的内容了。

下面给各位看看加密前后加密后的两幅IRIS的监听结果:

加密前:



加密后:



加密过的SSL会比普通的没有加密的WEB浏览的时候慢一点,主要是因为加密的隧道额外还要占用一点CPU的资源,对于那些没有任何秘密可言的WEB站点没有需要用加密的SSL通道。只要对于那些重要的目录和站点才有这个必要性。

三、Dnawo注

1.从一个站点生成的证书能不能用于其他站点?
答:不能。如果站点未生成过证书,则"WEB服务器证书向导"下一步将是创建证书;如果站点生成过证书但还未被处理,则"WEB服务器证书向导"下一步将是处理挂起的证书请求;如果站点已有证书,则"WEB服务器证书向导"下一步是修改当前证书分配。

2.对于有证书的站点还能不能用http://访问?
答:可以。不钩选"申请安全通道(SSL)"后用http和https都可以访问。

3.用https://访问老提示"本页不但包含安全的内容,也包含不安全的内容。是否显示不安全的内容?"怎么回事?
答:使用https访问的页面都是加密的,如果加密页面中引用了非加密页面的内容,就会提示"本页不但包含安全的内容,也包含不安全的内容。是否显示不安全的内容?"。
a、客户端解决方法:打开Internet选项,将安全---->Internet----->自定义级别(C)----->其它->“显示混合内容”处从默认的“提示”设置为“启用”即可。
b、服务器端解决方法:尽可能不引用非加密页面内容,非得引用时尝试下能不能用https方式引用,如Flash:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="850" height="291">
        <param name="movie" value="media/main.swf">
        <param name="quality" value="high">
        <param name="wmode" value="transparent">
        <embed src="media/main.swf" width="850" height="291" quality="high" pluginspage="https://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent"></embed>
</object>

4.如何在程序代码中验证客户证书?
答:首先要正确设置服务器证书,并将根证书安装到服务器本地计算机。将证书序列号保存到数据库(一般是在用户表里增加一个证书序列号字段,代替用户名/密码),通过服务器环境变量Request.ServerVariables("CERT_SERIALNUMBER")得到证书序列号,然后根据证书序列号判断用户身份(代替用户名/密码验证)。

上一篇: 0+1=1 && 1+1>2
下一篇: 入市须知
文章来自: 51CTO.COM
引用通告: 查看所有引用 | 我要引用此文章
Tags:
最新日志:
评论: 1 | 引用: 0 | 查看次数: 8091
发表评论
登录后再发表评论!