我的参赛主页是:http://2010blog.51cto.com/1060257,请各位支持我,给我投上宝贵一票,谢谢!

 

Apache服务器与客户端的通信是明文方式,很多通过HTTP协议传送数据的应用将受到黑客的威胁,信息的安全性难以得到保障。因此,本文就将对SSL协议进行深入剖析,并介绍如何使用SSL技术保护Apache服务器通信。

全文请见:http://netsecurity.51cto.com/art/201011/234421.htm

(续:使用SSL协议保证web服务通信安全(一、基础理论篇))

6.Apache中SSL原理

在SSL通信中,首先采用非对称加密交换信息,使得服务器获得浏览器端提供的对称加密的密钥,然后利用该密钥进行通信过程中信息的加密和解密。为了保证消息在传递过程中没有被篡改,可以加密Hash编码来确保信息的完整性。

服务器数字证书主要颁发给Web站点或其他需要安全鉴别的服务器,证明服务器的身份信息,同样客户端数字证书用于证明客户端的身份。

使用公用密钥的方式可以保证数据传输没有问题,但如果浏览器客户访问的站点被假冒,这也是一个严重的安全问题。这个问题不属于加密本身,而是要保证密钥本身的正确性问题。要保证所获得的其他站点公用密钥为其正确的密钥,而非假冒站点的密钥,就必须通过一个认证机制,能对站点的密钥进行认证。当然即使没有经过认证,仍然可以保证信息传输安全,只是客户不能确信访问的服务器没有被假冒。如果不是为了提供电子商务等方面对安全性要求很高的服务,一般不需要如此严格的考虑。

下面给出使用SSL进行通信的过程(参见图2):

(1)客户端向服务器端发起对话,协商传送加密算法。例如:对称加密算法有DES、RC5,密钥交换算法有RSA和DH,摘要算法有MD5和SHA。

(2)服务器向客户端发送服务器数字证书。比如:使用DES-RSA-MD5这对组合进行通信。客户端可以验证服务器的身份,决定是否需要建立通信。

(3)客户端向服务器传送本次对话的密钥。在检查服务器的数字证书是否正确,通过CA机构颁发的证书验证了服务器证书的真实有效性之后,客户端生成利用服务器的公钥加密的本次对话的密钥发送给服务器。
 

4)服务器用自己的私钥解密获取本次通信的密钥。

(5)双方的通信正式开始。

图2  SSL通信流程示意

图2  SSL通信流程示意

在一般情况下,当客户端是保密信息的传递者时,他不需要数字证书验证自己身份的真实性,如用户通常使用的网上银行交易活动,客户需要将自己的隐秘信息——账号和密码发送给银行,因此银行的服务器需要安装数字证书来表明自己身份的有效性,否则将会使得信息泄露。当然,在某些安全性要求极高的B2B(Business to Business)应用,服务器端也需要对客户端的身份进行验证,这时客户端也需要安装数字证书以保证通信时服务器可以辨别出客户端的身份,验证过程类似于服务器身份的验证过程。另外,在一些电子商务的应用中,可能还会使用到电子签名,或者为了信息交换的更加安全,会增加电子签名和消息校验码(MAC)。而在通常情况下,浏览器都会通过交互的方式来完成上述的通信过程,下面在Linux中对Apache采用SSL也会作详细地介绍。

3  安装和启动SSL

1.安装SSL

虽然Apache服务器不支持SSL,但Apache服务器有两个可以自由使用的支持SSL的相关计划,一个为Apache-SSL,它集成了Apache服务器和SSL,另一个为Apache+mod_ssl,它是通过可动态加载的模块mod_ssl来支持SSL,其中后一个是由前一个分化出的,并由于使用模块,易用性很好,因此使用范围更为广泛。还有一些基于Apache并集成了SSL能力的商业Web服务器,然而使用这些商业Web服务器主要是北美,这是因为在那里SSL使用的公开密钥的算法具备专利权,不能用于商业目的,其他的国家不必考虑这个专利问题,而可以自由使用SSL。

Apache+mod_ssl依赖于另外一个软件:OpenSSL,它是一个可以自由使用的SSL实现,首先需要安装这个软件。用户可以从网站http://www.openssl.org/source/上(如图3所示)下载Linux下OpenSSL的最新版本:openssl-1.0.0b.tar.gz。

图3  OpenSSL软件网站首页

图3  OpenSSL软件网站首页
 

 

下载源代码安装包后,使用如下的步骤安装即可:

(1)用openssl-1.0.0b.tar.gz软件包安装OpenSSL之前,首先须要对该软件包进行解压缩和解包。用以下命令完成软件包的解压缩和解包:

#tar xvfz openssl-1.0.0b.tar.gz

(2)解压缩后,进入源码的目录openssl-1.0.0b,并使用配置脚本进行环境的设置。相应的命令为:

//改变当前目录为openssl-1.0.0b目录

#cd openssl-1.0.0b

//执行该目录下配置脚本程序

#./configure

(3)在执行./configure之后,配置脚本会自动生成Makefile。如果在设置的过程中没有任何的错误,就可以开始编译源码了。相应的命令及其显示结果如下:

#make & make install

安装好OpenSSL之后,就可以安装使用Apache+mod_ssl了。然而为了安装完全正确,需要清除原先安装的Apache服务器的其他版本,并且还要清除所有的设置文件及其缺省设置文件,以避免出现安装问题。最好也删除/usr/local/www目录(或更名),以便安装程序能建立正确的初始文档目录。如果是一台没有安装过Apache服务器的新系统,就可以忽略这个步骤,而直接安装Apache+mod_ssl了。

2.启动和关闭SSL

启动和关闭该服务器的命令如下所示:

#apachectl start:启动apache。

#apachectl startssl:启动apache ssl。

#apachectl stop:停止apache。

#apachectl restart:重新启动apache。

#apachectl status:显示apache的状态。

#apachectl configtest:测试httpd.conf配置是否正确。

# /usr/local/sbin/apachectl startssl

此时使用start参数为仅仅启动普通Apache的httpd守护进程,而不启动其SSL能力,而startssl才能启动Apache的SSL能力。如果之前Apache的守护进程正在运行,便需要使用stop参数先停止服务器运行。
 

 

然后,就可以启动Mozilla、IE或其他支持SSL的浏览器,输入URL为:https://ssl_server/来查看服务器是否有相应,https使用的缺省端口为443,如果一切正常,服务器将会返回给客户端证书,由客户端进行验证并且判断,是否接受该证书并进行下一步的通信过程。

下面以Linux下的Mozilla Firefox浏览器为例,来简要说明使用Apache+SSL服务器的过程。首先,图4给出了查看和验证该证书的相关提示;最后,图5则给出了证书验证成功后,采用SSL进行保密传输的具体界面示意:

图4  验证证书示意

图4  验证证书示意

图5  证书通过验证,正常通信开始

图5  证书通过验证,正常通信开始