用SSL安全协议实现WEB服务器的安全性.docx
《用SSL安全协议实现WEB服务器的安全性.docx》由会员分享,可在线阅读,更多相关《用SSL安全协议实现WEB服务器的安全性.docx(8页珍藏版)》请在冰豆网上搜索。
用SSL安全协议实现WEB服务器的安全性
用SSL安全协议实现WEB服务器的安全性
现今SSL安全协议广泛地用在Internet和Intranet的服务器产品和客户端产品中,用于安全地传送数据,集中到每个WEB服务器和浏览器中,从而来保证来用户都可以与Web站点安全交流。
本文将详细介绍SSL安全协议及在WEB服务器安全的应用。
一、SSL安全协议在WEB服务器中的应用
1、我们为提供具有真正安全连接的高速安全套接层SSL)交易,可以将PCI卡形式的SSL卸载(offloading)设备直接安装到Web服务器上,这种做法的好处是:
(1)从客户机到安全Web服务器的数据安全性;
(2)由于卸载工具执行所有SSL处理过程并完成TCP/IP协商,因此大大提高了吞吐量;
(3)简化了密钥的管理和维护。
安全性加大在实现向电子商务和其它安全Web站点的服务器增加SSL加速和卸载设备的结果是提高了交易处理速度。
但是由于设备是作为应用被安装在网络上的,因此设备与安全服务器之间的数据是未加密的。
将SSL卸载设备作为PCI扩展卡直接安装在安全服务器上,保证了从浏览器到服务器的连接安全性。
SSL可以用于在线交易时保护象信用卡号以及股票交易明细这类敏感信息。
受SSL保护的网页具有"https"前缀,而非标准的"http"前缀
2、新型专用网络设备SSL加速器可以使Web站点通过在优化的硬件和软件中进行所有的SSL处理来满足性能和安全性的需要。
当具有SSL功能的浏览器(Navigator、IE)与Web服务器(Apache、IIS)通信时,它们利用数字证书确认对方的身份。
数字证书是由可信赖的第三方发放的,并被用于生成公共密钥。
当最初的认证完成后,浏览器向服务器发送48字节利用服务器公共密钥加密的主密钥,然后Web服务器利用自己的私有密钥解密这个主密钥。
最后,浏览器和服务器在会话过程中用来加解密的对称密钥集合就生成了。
加密算法可以为每次会话显式地配置或协商,最广泛使用的加密标准为"数据加密标准"(DES)和RC4。
一旦完成上述启动过程,安全通道就建立了,保密的数据传输就可以开始了。
尽管初始认证和密钥生成对于用户是透明的,但对于Web服务器来说,它们远非透明。
由于必须为每次用户会话执行启动过程,因而给服务器CPU造成了沉重负担并产生了严重的性能瓶颈。
据测试,当处理安全的SSL会话时,标准的Web服务器只能处理1%到10%的正常负载。
二、应做的处理
密码在加解密数据时,使用两种类型的密钥。
私有密钥被发给各实体并且永远不向外透露,公共密钥可以任意分发。
这两种密钥对于认证过程是必不可少的。
使用公钥加密的数据不能使用同一个密钥进行解密,必须使用私有密钥进行解密。
SSL使用复杂的数学公式进行数据加密和解密,这些公式的复杂性根据密码的强度不同而不同。
高强度的计算会使多数服务器停顿,导致性能下降。
多数Web服务器在执行SSL相关任务时,吞吐量会显著下降,性能比在只执行HTTP1.0连接时的速度慢50多倍。
而且由于SSL复杂的认证方案和加/解密算法,SSL需要大量地消耗CPU资源,从而造成Web服务器性能很大的下降。
它所造成的服务器瓶颈使Web站点的速度慢如蜗牛爬行,这无疑会失去在线客户。
为解决这种性能上的损失,我们可以通过安装SSL加速器和卸载器来减少SSL交易中的时延。
加速器通过执行一部分SSL处理任务来提高交易速度,同时依靠安全Web服务器软件完成其余的任务。
卸载器承担所有SSL处理任务并且不需要安全Web服务器软件,从而使Web服务器可以以同样的高速度提供安全和非安全的服务。
由于密钥管理和维护过程不依靠对应用软件的手工配置,因此使用卸载器效率会更高一些。
多数这类设备作为网络应用被安装在机架式或小底座网络设备上,由于它们为整个网络提供加解密服务,因此设备与Web服务器之间的数据是未加密的。
通过直接在服务器上安装SSL卸载器,可以解决速度和安全性问题。
加密的数据由客户机经过Internet和网络直接传送到一台服务器上。
安装在这台服务器上的卸载器对数据进行解密并将其沿PCI总线直接传送到处理器。
这样做的结果是宿主服务器在保证客户机与服务器之间传输时数据安全性的同时,以非安全交易服务同样的速度提供了安全交易服务。
SSL加速设备的出现就是为了解决对CPU资源过量需求的SSL协议所造成的性能问题,这类设备是一些用以在不增加Web服务器负担的条件下处理SSL任务的特殊的网络部件。
通过优化硬件和软件,专用SSL加速器处理SSL会话的速度为标准Web服务器的10到40倍。
此外,SSL加速器解放了服务器资源,使这些资源可以真正用于处理应用逻辑和数据库查询,从而加快了整个站点的速度。
将SSL设备集成到网络中很简单,第4层到第7层交换机或负载均衡设备被配置为将所有的443端口(Https)请求改向传送到SSL设备。
这时,这台设备承担所有的SSL处理任务,因而立即解脱了Web服务器的负载。
随着安全传输流容量的增加,在不增加不必要的管理负担的条件下,可以再部署其他SSL设备。
最近,SSL加速器功能已经被集成到象服务器端缓存(即所谓的"服务器加速器")这类Web内容提交产品中了。
这种作法的主要好处是,服务器加速器进行SSL处理和对象提交。
配置SSL功能的服务器加速器使广泛地将SSL用于Web基础设施上的安全内容交换成为可能,安全网页将快速地得到提交,安全交易也将迅速地完成。
三、如何实现WEB和Internet安全
我们在安装好CertificateServer后,给自己的WebServer发一张证书,安全站点已经建立起来了,在IIS管理器中打开安全通道(先不要接受客户证书验证,如果没有浏览器证书的话),把http改为https后访问的站点,怎么系统提示服务器证书有问题?
记得在浏览器中安装的根证书了?
要不就是服务器证书过期了,如果没有在浏览器中安装根证书,就要安装它,同时其他人通过Internet访问站点如果没有安装根证书,需要将根证书放在网上让别人下载。
用IE安装根证书很简单,浏览器提示用户打开或保存时选择打开,会看到根证书信息然后按安装证书就可以了。
但可能会发现Netscap无法安装根证书,SSL协议是由Netscape首先提出并实现的,Netscape使用MIME类型application/x-x509-ca-cert来表示CA证书,IE3.1以后开始支持SSL,起初Windows系统的数字证书文件(.crt和.cer)也采用相同的MIME类型,IE5.0以后MIME类型被改为application/pkix-cert这就造成Netscape安装根证书困难。
不过这个问题好解决,只要在IIS里新注册application/x-x509-ca-cert的MIME类型就可以了。
刚发的证书浏览器有时也会显示证书过期,这是因为浏览器判断证书有效是从证书有效起始时间的后一天开始,此外数字证书中的日期大都是GMT时间而不是本地时间,所以通常将本机时间向后调整一天这个问题就能解决,所以证书过期不仅仅可能表示太晚也可能表示太早。
一切都已经就绪,进入安全网页了,在IE的状态栏里应该有一个小锁,双击这个小锁能看到站点证书信息,同时也能看到整个证书链。
现在也许会问"那么现在我怎么用SSL加密我的数据呢?
",实际上现在浏览器和Web服务器之间交换的所有信息都已经被加密,SSL是工作在网络层与会话层之间的协议,它在TCP/IP和HTTP之间增加了一个加密层,所以对于工作在HTTP协议以上的用户而言,加密是完全透明的,所以请忘记"用SSL加密"这句话,除非直接在Socket上开发,比如写个网络蚂蚁之类的。
现在想用SSL实现更多的东西,不仅仅是加密。
是申请浏览器(客户)证书的时候了,申请客户证书过程也不复杂,除了相同的名称,国家之类的还多一个EMail地址,如果用IE申请证书可能会有许多选项,其中有两个比较有意义,"允许私钥被导出"对与不在固定机器上上网的人比较有用,如果在一台机器上申请了证书,导出证书和私钥并安装到其他机器上就可以在其他机器上使用了。
"用户保护"会让浏览器在使用的私钥时提示,这通常发生在加密和签名过程之前。
证书安装过程通常都是自动的,安装完成后可以欣赏一下,在IE中打开Internet选项,选择内容一栏,按"证书"按钮",在个人一栏内应该有客户证书。
现在在IIS管理器中设置站点要求客户证书,然后访问站点,浏览器会弹出一个对话框,让选择要使用的客户证书,然后就进去了,也没什么不同。
那么怎么样利用SSL实现身份认证呢?
首先可以在IIS管理器中启用客户证书映射,将客户证书影射到NT帐号,可以映射某张证书,也可以映射所有根证书所签发的客户证书,如果在签发者列表中找不到根证书,需要运行SSLCA.exe(IIS4.0以上),以后的事就属于NT管理员的范畴了。
如果不想用NT的安全机制,就需要获取对方客户证书的信息,然后进行判断。
通常客户证书的信息由HTTPS_开头的服务器变量提供,如ApacheServer,Domino等,可以查看文档或者写一个小的CGI程序列出所有的服务器变量。
如果是IIS就更简单了:
SSL原理解密
RSA公钥加密在计算机产业中被广泛使用在认证和加密。
可以从RSADataSecurityInc.获得的RSA公钥加密许可证。
公钥加密是使用一对非对称的密码加密或解密的方法。
每一对密码由公钥和私钥组成。
公钥被广泛发布。
私钥是隐密的,不公开。
用公钥加密的数据只能够被私钥解密。
反过来,使用私钥加密的数据只能用公钥解密。
这个非对称的特性使得公钥加密很有用。
使用公钥加密法认证
认证是一个身份认证的过程。
在下列例子中包括甲和乙,公钥加密会非常轻松地校验身份。
符号{数据}key意味着"数据"已经使用密码加密或解密。
假如甲想校验乙的身份。
乙有一对密码,一个是公开的,另一个是私有的。
乙透露给甲他的公钥。
甲产生一个随机信息发送给乙。
甲——〉乙:
random-message
乙使用他的私钥加密消息,返回甲加密后的消息。
乙——〉甲:
{random-message}乙的私钥
甲收到这个消息然后使用乙的以前公开过的公钥解密。
他比较解密后的消息与他原先发给乙的消息。
如果它们完全一致,就会知道在与乙说话。
任意一个中间人不会知道乙的私钥,也不能正确加密甲检查的随机消息。
除非你清楚知道你加密的消息。
用私钥加密消息,然后发送给其他人不是一个好主意。
因为加密值可能被用来对付你,需要注意的是:
因为只有你才有私钥,所以只有你才能加密消息。
所以,代替加密甲发来的原始消息,乙创建了一个信息段并且加密。
信息段取自随机消息(random-message)并具有以下有用的特性:
1.这个信息段难以还原。
任何人即使伪装成乙,也不能从信息段中得到原始消息;
2.假冒者将发现不同的消息计算出相同的信息段值;
3.使用信息段,乙能够保护自己。
他计算甲发出的随机信息段,并且加密结果,并发送加密信息段返回甲。
甲能够计算出相同的信息段并且解密乙的消息认证乙。
这个技术仅仅描绘了数字签名。
通过加密甲产生的随机消息,乙已经在甲产生的消息签名。
因此我们的认证协议还需要一次加密。
一些消息由乙产生:
甲——〉乙:
你好,你是乙么?
乙——〉甲:
甲,我是乙
{信息段[甲,我是乙]}乙的私钥
当你使用这个协议,乙知道他发送给乙的消息,他不介意在上面签名。
他先发送不加密的信息,"甲,我是乙。
",然后发送信息段加密的消息版本。
甲可以非常方便地校验乙就是乙,同时,乙还没有在他不想要的信息上签名。
提交公钥
那么,乙怎样以可信的方式提交他的公钥呢?
看看认证协议如下所示:
甲——〉乙:
你好
乙——〉甲:
嗨,我是乙,乙的公钥
甲——〉乙:
proveit
乙——〉甲:
甲,我是乙{信息段[甲,我是乙]}乙的私钥
在这个协议下,任何人都能够成为"乙"。
所有你所要的只是公钥和私钥。
你发送给甲说你就是乙,这样你的公钥就代替了乙的密码。
然后,你发送用你的私钥加密的消息,证明你的身份。
甲却不能发觉你并不是乙。
为了解决这个问题,标准组织已经发明了证书。
一个证书有以下的内容:
*证书的发行者姓名
*发行证书的组织
*标题的公钥
*邮戳
证书使用发行者的私钥加密。
每一个人都知道证书发行者的公钥(这样,每个证书的发行者拥有一个证书)。
证书是一个把公钥与姓名绑定的协议。
通过使用证书技术,每一个人都可以检查乙的证书,判断是否被假冒。
假设乙控制好他的私钥,并且他确实是得到证书的乙,就万事大吉了。
这些是修订后的协议:
甲——〉乙:
你好
乙——〉甲:
嗨,我是乙,乙的校验
甲——〉乙:
proveit
乙——〉甲:
甲,我是乙{信息段[甲,我是乙]}乙的私钥
现在当甲收到乙的第一个消息,他能检查证书,签名(如上所述,使用信息段和公钥解密),然后检查标题(乙的姓名),确定是乙。
他就能相信公钥就是乙的公钥和要求乙证明自己的身份。
乙通过上面的过程,制作一个信息段,用一个签名版本答复甲。
甲可以校验乙的信息段通过使用从证书上得到的公钥并检查结果。
如果一个黑客,叫H
甲——〉H:
你好
H——〉不能建立一个令甲相信的从乙的消息。
交换密码(secret)
一旦甲已经验证乙后,他可以发送给乙一个只有乙可以解密、阅读的消息:
甲——〉乙:
{secret}乙的公钥
唯一找到密码的方法只有使用乙的私钥解码上述的信息。
交换密码是另一个有效使用密码加密的方法。
即使在甲和乙之间的通讯被侦听,只有乙才能得到密码。
使用密码作为另一个secret-key增强了网络的安全性,但是这次这是一个对称的加密算法(例如DES、RC4、IDE甲)。
因为甲在发送给乙之前产生了密码,所以甲知道密码。
乙知道密码因为乙有私钥,能够解密甲的信息。
但他们都知道密码,他们都能够初始化一个对称密码算法,而且开始发送加密后的信息。
这儿是修定后的协议:
甲——〉乙:
你好
乙——〉甲:
嗨,我是乙,乙的校验
甲——〉乙:
proveit
乙——〉甲:
甲,我是乙{信息段[甲,我是乙]}乙的私钥
甲——〉乙:
ok乙,hereisasecret{secret}乙的公钥
乙——〉甲:
{somemessage}secret-key
黑客窃听
那么如果有一个恶意的黑客H在甲和乙中间,虽然不能发现甲和乙已经交换的密码,但能干扰他们的交谈。
他可以放过大部分信息,选择破坏一定的信息(这是非常简单的,因为他知道甲和乙通话采用的协议)。
甲——〉H:
你好
H——〉乙:
你好
乙——〉H:
嗨,我是乙,乙的校验
H——〉甲:
嗨,我是乙,乙的校验
甲——〉H:
proveit
H——〉乙:
proveit
乙——〉H:
甲,我是乙{信息段[甲,我是乙]}乙的私钥
H——〉甲:
甲,我是乙{信息段[甲,我是乙]}乙的私钥
甲——〉H:
ok乙,hereisasecret{secret}乙的公钥
H——〉乙:
ok乙,hereisasecret{secret}乙的公钥
乙——〉H:
{somemessage}secret-key
H——〉甲:
Garble[{somemessage}secret-key]
H忽略一些数据不修改,直到甲和乙交换密码。
然后H干扰乙给甲的信息。
在这一点上,甲相信乙,所以他可能相信已经被干扰的消息并且尽力解密。
需要注意的是,H不知道密码,他所能做的就是毁坏使用秘钥加密后的数据。
基于协议,H可能不能产生一个有效的消息。
但下一次呢?
为了阻止这种破坏,甲和乙在他们的协议中产生一个校验码消息(messageauthenticationcode)。
一个校验码消息(MAC)是一部分由密码和一些传输消息产生的数据。
信息段算法描述的上述特性正是它们抵御H的功能:
MAC=Digest[somemessage,secret]
因为H不知道密码,他不能得出正确的值。
即使H随机干扰消息,只要数据量大,他成功的机会微乎其微。
例如,使用HD5(一个RSA发明的好的加密算法),甲和乙能够发送128位MAC值和他们的消息。
H猜测正确的MAC的几率将近1/18,446,744,073,709,551,616约等于零。
这是又一次修改后的协议:
甲——〉乙:
你好
乙——〉甲:
嗨,我是乙,乙的校验
甲——〉乙:
proveit
乙——〉甲:
嗨,我是乙,乙的校验
甲,我是乙
{信息段[甲,我是乙]}乙的私钥
ok乙,hereisasecret{secret}乙的公钥
{somemessage,MAC}secret-key
现在H已经无技可施了。
他干扰了得到的所有消息,但MAC计算机能够发现他。
甲和乙能够发现伪造的MAC值并且停止交谈。
H不再能与乙通讯。