安全连接方式SSL
通常的连接方式中通信是以非加密的形式在网络上传播的这就有可能被非法窃听到尤其是用于认证的口令信息为了避免这个安全漏洞就必须对传输过程进行加密对HTTP传输进行加密的协议为HTTPS它是通过SSL(Secure socket layer)进行HTTP传输的协议不但通过公用密钥的算法进行加密保证传输的安全性而且还可以通过获得认证证书CA保证客户连接的服务器没有被假冒
使用公用密钥的方式可以保证数据传输没有问题但如果浏览器客户访问的站点被假冒这也是一个严重的安全问题这个问题不属于加密本身而是要保证密钥本身的正确性问题要保证所获得的其他站点公用密钥为其正确的密钥而非假冒站点的密钥就必须通过一个认证机制能对站点的密钥进行认证当然即使没有经过认证仍然可以保证信息传输安全只是客户不能确信访问的服务器没有被假冒如果不是为了提供电子商务等方面对安全性要求很高的服务一般不需要如此严格的考虑
下面我们就分几节来谈到如何在Apache服务器上实现SSL
第一节SSL
SSL除了可以用在Web服务器与浏览器之间信息交换以外还可以支持其他我们所熟识的网络应用以TCP/IP网络层来看SSL是定位在网络层之上的应用协议如图
HTTPFTPSMTP
Secure Socket Layer
TCP层
IP层
任何以TCP/IP层以上的网络协议SSL都可以支持因此HTTPFTPSMTP等等皆是SSL的保护范围SSL协议一共包含两个部分SSL Handshake协议和SSL Record协议前者是负责通信前的一些参数协商后者则是定义SSL的内部数据格式
SSL Handshake协议
SSL中Handshake协议可以说是SSL的前置步骤就好象初次见面的两个人回先自我介绍一番再开始谈话一样通信的饿双方(商店的服务器与客户计算机)先进行沟通与协调有关SSL通信的参数设置其中包括
※通信中所使用的SSL版本※信息加密用的算法 ※客户端的身份验证要求 ※所使用的公开金钥算法
这个协议的饿大致步骤如下
()Client Hello:首先由客户端计算机向服务器Say Hello并同时将客户端计算机所能支持的安全模块告诉对方以便沟通信息内容包括SSL协议版本本次联机的饿识别码以及加密模块等
()Server Hello这时商店端服务器在收到这个信息后立即送出包含以下信息的响应信息给客户端 ※服务器的数字证书让客户端可以检查服务器的身份
※如果服务器要求双方相互认证的话则送出认证请求的饿信息要求客户端也提出识别身份的数字证书
※服务器用来加密的金钥
()加解密参数当客户端收到服务器的信息后就可根据要求来响应并且也将客户端的公用金钥也送给对方作为后续信息的加解密之用到这个阶段为止通信双方都已经达成了共识并准备传送真正的信息内容
()HTTP数据流协调的工作已经大功告成了!这时双方就可以HTTP协议来进行数据交换了
SSL Record协议
顾名思义Record协议是在描述SSL信息交换的过程中的记录格式SSL协议是介于应用层和网络层之间因此它回接收来自应用层的信息并加以包装后交由下一层(也就是网络层来传送)
第二节Apache上实现SSL
虽然Apache服务器不支持SSL但Apache服务器有两个可以自由使用的支持SSL的相关计划一个为ApacheSSL它集成了Apache服务器和SSL另一个为Apache+mod_ssl它是通过可动态加载的模块mod_ssl来支持SSL其中后一个是由前一个分化出的并由于使用模块易用性很好因此使用范围更为广泛还有一些基于Apache并集成了SSL能力的商业Web服务器然而使用这些商业Web服务器主要是北美这是因为在那里SSL使用的公开密钥的算法具备专利权不能用于商业目的其他的国家不必考虑这个专利问题而可以自由使用SSL
以下是我们安装说需要的各部分说明
apache_targz(服务器)
mod_ssltargz(SSL接口模块)
openssltargz(ssl安全和算法类库)
mod_perltargz(perl接口模块)
rsareftarZ(RSA算法包)
perl_targz(perl环境)
如果你的系统是从头装起的话建议你留出一个叫/chroot的分区用来运行Apache
至于这个分区的大小取决于你自已一般来说一个普通的网站有M也就够了但你的系统如果早就运行了Apache你可以另外开辟一个分区或者选择不用独立分区来安装仅仅在根下面开一个目录
另外我假定你的系统已经通过了一定的安全检测——在安装Apache之前(如果有其它漏洞存在的话你认为运行在其上的Apache会怎样所谓覆巢之下焉有完卵:)检测至少要包括(但不仅限于)——移除不安全的SUID程序升级某些守护进程去掉不必要的服务还假定你是的WEBSERVER是运行TCP/IP而且有自己的地址
一平台
以下测试都在下列平台下通过:
SlackwarexdistributionusinggccandPerlv_
SolarisonSparcusinggccvandPerlv_
Digital UNIX VF distributionusinggccand Perlv_
二获取所需要的软件
因为阿帕奇并没有在她的包里自己SSL因此我们必须先下载到这些加密网页所必需的部份
ApacheWebServer
不必多说我们当然需要获得这个webserver现在的版本是阿帕奇是现在世界
上使用最广泛的webserver
mod_ssl
这是一个为Apachexwebserver提供强力加密的的软件模块它使用的是SSLv和v 以及TLS(TransportLayerSecurity)v协议该软件包是在BSD的license下开发的在非商业的情况下你可以自由地使用它要判断该使用哪一个版本的mod_ssl很简单它的版本号是格式的也就是说你如果用的是
的Apache那么就该用的mod_ssl
mod_perl
Apachex 的perl接口模块
OpenSSL
这一软件包提供了SSLv/v(SecureSocketsLayer)及TLSv(TransportLayerSecurity) 协议的加密保护
RSAref用搜索引擎查找一下rsareftarZ应该就能找到了RSA加密算法的实现软件包
Perl减压缩安装(详见Perl介绍)
Perl是一种编程语言它是一种非常流行的编程语言在文本处理端口通信协调多个不同应用以及完成其他诸多任务时都受到人们的欢迎Perl同时也是一种颇有名气的流行CGI编程语言不过这只是Perl诸多应用中的一种
我们将把这些程序安装于/usr/local目录下
增加功能模块可以给阿帕奇更强大的功能如果你需要更多的模块的话自己去获得它并且加载比如mod_php这一模块也是现在流行的可以使阿帕奇提供php脚本支持……
三软件包的安装
在实际安装前我们要决定我们将把webserver安装在什么环境下对于一个对安全有相当高要求的人来说可以将服务器和软件安装于chroot环境chroot改变root目录并且仅在这一目录中执行程序这提供了一个内建的小环境即使入侵者已经通过cgi程序或者其它办法通过端口获得了系统的进入权限它也只能够在这一受限的环境中活动从安全角度考量这当然是最好的但对系统管理员来说这样安装相对麻烦一些还必须把一些必要的库perl以及相关工具也搬到chroot中所以——你自己决定吧这里我们介绍的是在chroot下安装
展开这些软件包:
#gzipdcapache_targz|tarxvf
#gzipdcmod_ssltargz|tarxvf
#gzipdcopenssltargz|tarxvf
#gzipdcmod_perltargz|tarxvf
展开并且编译rsaref
#mkdirrsaref
#cdrsaref
#gzipdc/rsareftarZ|tarxvf
#tarxvfrsareftar
#cprpinstall/unixtemp
#cdtemp
#make
#mvrsarefalibrsarefa
#cd//
编译OpenSSL
#cdopenssl
#perlutil/perlpathpl/usr/bin/perl(PathtoPerl)
#/configL`pwd`//rsaref/temp/
#make
#maketest
#cd
将mod_perl加到Apache的编译选项里
#cdmod_perl
#perlMakefilePLAPACHE_PREFIX=/usr/local/apache\
APACHE_SRC=/apache_/src\
USE_APACI=
你会得到下面的提示:
Configuremod_perlwith/apache_/src?[y]
直接按enter就是默认的yes
然后Makefile会问你是否建立httpd可以用n选择不
#make
#makeinstall
#cd
将mod_ssl加到Apache中
#cdmod_ssl
#/configurewithapache=/apache_\
prefix=/usr/