The views and opinions expressed all for my own,only for study and test, not reflect the views of Any Company and its affiliates.
分类:
2009-05-05 16:20:54
但是,Apache服务器与客户端的通信是明文方式,很多通过HTTP协议传送数据的应用将受到黑客的威胁,信息的安全性难以得到保障。因此,本文就将对在Linux中,使用SSL技术保护Apache服务器通信做详细介绍。
Apache的安装和启动
#rpm -Uvh ant-apache-bsf-1.6.1-1jpp_3rh.noarch.rpm
ApacheRPM将把文件安装在如下的目录中:
●/etc/httpd/conf:这一目录包含Apache的所有配置文件,包括access.conf、httpd.conf和srm.conf。
●/etc/rc.d/:位于这一目录下的目录树包含系统的启动脚本。ApacheRPM在这里安装了Web服务器的整套脚本,这些脚本可用来从命令行启动和停止服务器,并且也可在工作站关闭、启动或重新引导时自动启动或停止服务器。
●/home/httpd: RPM在这一目录安装默认的服务器图标、CGI脚本和HTML文件。如果想在其他地方保存Web内容,通过在服务器的配置文件适当的地方进行更改可以实现。
●/usr/doc和/usr/man: RPM包含手册页和readme文件,它们被放在这些目录中。像大多数RPM软件包一样,readme文件以及其他相关的文档放在/usr/doc下的一个以服务器软件包的版本命名的目录中。
●/usr/sbin:可执行程序放在这一目录中。包括服务器程序本身,还有各种工具,如用于创建验证口令文件的htpasswd程序。
●/var/log/http: 服务器日志文件存放于该目录。在默认情况下,有两个日志文件:access_log和error_log,但是可以定义任意多个包含各种信息的自定义日志文件。
Apache服务器的手动启动很简单,假设Apache服务器安装在/usr/sbin/目录下,在Linux终端启动Apache的命令为:
#.cd /usr/sbin
#./httpd start
重新启动Apache的命令为:
#.cd /usr/sbin
#./httpd restart
停止Apache的命令为:
#.cd /usr/sbin
#./httpd stop
SSL的原理
通常的连接方式中,通信是以非加密的形式在网络上传播的,这就有可能被非法窃听到,尤其是用于认证的口令信息。为了避免这个安全漏洞,就必须对传输过程进行加密。对HTTP传输进行加密的协议为HTTPS,它是通过SSL进行HTTP传输的协议,不但通过公用密钥的算法进行加密保证传输的安全性,而且还可以通过获得认证证书CA,保证客户连接的服务器没有被假冒。
SSL是一种国际标准的加密及身份认证通信协议,用户采用的浏览器就支持此协议。SSL(Secure Sockets Layer)最初是由美国Netscape公司研究出来的,后来成为了Internet网上安全通信与交易的标准。SSL协议使用通信双方的客户证书以及CA根证书,允许客户/服务器应用以一种不能被偷听的方式通信,在通信双方间建立起了一条安全的、可信任的通信通道。它具备以下基本特征:信息保密性、信息完整性、相互鉴定。
在SSL通信中,首先采用非对称加密交换信息,使得服务器获得浏览器端提供的对称加密的密钥,然后利用该密钥进行通信过程中信息的加密和解密。为了保证消息在传递过程中没有被篡改,可以加密Hash编码来确保信息的完整性。
服务器数字证书主要颁发给Web站点或其他需要安全鉴别的服务器,证明服务器的身份信息,同样客户端数字证书用于证明客户端的身份。
使用公用密钥的方式可以保证数据传输没有问题,但如果浏览器客户访问的站点被假冒,这也是一个严重的安全问题。这个问题不属于加密本身,而是要保证密钥本身的正确性问题。要保证所获得的其他站点公用密钥为其正确的密钥,而非假冒站点的密钥,就必须通过一个认证机制,能对站点的密钥进行认证。当然即使没有经过认证,仍然可以保证信息传输安全,只是客户不能确信访问的服务器没有被假冒。如果不是为了提供电子商务等方面对安全性要求很高的服务,一般不需要如此严格的考虑。
下面给出使用SSL进行通信的过程:
● 客户端向服务器端发起对话,协商传送加密算法。例如:对称加密算法有DES、RC5,密钥交换算法有RSA和DH,摘要算法有MD5和SHA。
● 服务器向客户端发送服务器数字证书。比如:使用DES-RSA-MD5这对组合进行通信。客户端可以验证服务器的身份,决定是否需要建立通信。
● 客户端向服务器传送本次对话的密钥。在检查服务器的数字证书是否正确,通过CA机构颁发的证书验证了服务器证书的真实有效性之后,客户端生成利用服务器的公钥加密的本次对话的密钥发送给服务器。
● 服务器用自己的私钥解密获取本次通信的密钥。
● 双方的通信正式开始。
在一般情况下,当客户端是保密信息的传递者时,不需要数字证书验证自己身份的真实性,如我们通常使用的网上银行交易活动,客户需要将自己的隐秘信息如账号和密码发送给银行,因此银行的服务器需要安装数字证书来表明自己身份的有效性,否则将会使得信息泄露。当然,在某些安全性要求极高地B2B应用,服务器端也需要对客户端的身份进行验证,这时客户端也需要安装数字证书以保证通信时服务器可以辨别出客户端的身份,验证过程类似于服务器身份的验证过程。而在通常情况下,浏览器都会通过交互的方式来完成上述的通信过程。
在Linux中使用Apache+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实现,首先需要安装这个Port。
openssl-0.9.7a-2.i386.rpm下载地址为:ftp://rpmfind.net/linux/redhat/9/en/os/i386/RedHat/RPMS/openssl-0.9.7a-2.i386.rpm,也可以在Red Hat Linux 9或者Fedora Core 4等Linux发行版本的光盘中找到该RPM包。并且,在默认条件下,执行系统安装将会安装该软件包。
安装命令如下:
#rpm - ivh openssl- 0.9.7a-2.i386.rpm
安装好openssl之后,就可以安装Apache+mod_ssl了。然而为了安装完全正确,需要清除原先安装的Apache服务器的其他版本,并且还要清除所有的设置文件及其缺省设置文件,以避免出现安装问题。最好也删除 /usr/local/www目录(或更名),以便安装程序能建立正确的初始文档目录。如果是一台没有安装过Apache服务器的新系统,就可以忽略这个步骤,而直接安装Apache+mod_ssl了。
启动和关闭该服务器的命令如下所示:
●#apachectl start:启动apache
●#apachectl startssl:启动apache ssl。注意,此处若使用start参数,则仅仅启动普通Apache的httpd守护进程,而不启动其SSL能力,只有startssl才能启动Apache的SSL能力。如果之前Apache的守护进程正在运行,便需要使用stop参数先停止服务器运行。
●#apachectl stop:停止apache。
●#apachectl restart:重新启动apache。
●#apachectl status:显示apache的状态。
●#apachectl configtest:测试httpd.conf配置是否正确。
启动apache ssl后,就可以启动Mozilla、IE或其他支持SSL的浏览器,输入URL为:来查看服务器是否有响应,https使用的缺省端口为443,如果一切正常,服务器将会返回给客户端证书,由客户端进行验证并且判断,是否接受该证书并进行下一步的通信过程。