由于http是基于明文传输的,所以站点上的信息很容易被别人看到,为了实现我们的站点的安全性,我们通常的做法有三种:身份验证、来源控制和加密访问(https)。

1.身份验证:顾名思义,当用户访问我们的站点时,需要对访问者进行身份验证,只有用户输入正确的用户名和口令才能访问我们的站点内容。

环境:rhel 5.4

所使用的软件包:httpd-2.2.3-31.el5.i386.rpm

具体实现:

echo “welcome to my home”>/var/www/html/index.html         创建一个网站首页

vim /etc/httpd/conf/httpd.conf                               修改httpd的配置文件

306 <Directory"/var/www/html">

327     AllowOverride  all                               此处将none修改为all

335 </Directory>

    service httpd start                                          启动httpd服务

   在站点根目录创建一个名为.htaccess的说明文件,文件内容如下:

authuserfile/var/www/.htpasswd                          指明验证库文件

authname  "please input  your name and password"         验证提示

authtype        basic                                    指明验证类型

require         valid-user                               指明可访问的用户(合法验证的用户)

使用htpasswd产生.htpasswd帐号文件:

htpasswd   -c /var/www/.htpasswd   zhangsan注意:在产生新文件时需要-c,追加用户时不需要

New password: 123

Re-type new password:123

   service httpd restart                                        重新启动httpd服务


2.来源控制:即我们可以限制允许和禁止哪些网段的用户的访问。

具体实现:

我们只需要在上面的基础之上对httpd的配置文件进行修改即可:

332     Order allow,deny

333     deny from 192.168.2.2             表示允许除192.168.2.2以外的用户访问

334     Allow from all

注意:332行的顺序,顺序不同,结果就不同哦!


3.加密访问:我们通过http和安全套接字ssl结合从而实现站点的安全性的验证。ssl是介于应用层与传输层的一个夹层,由于http是明文传输的,为了对其实现一定的安全性,网景(Netscape)公司开发出了ssl后经标准化组织标准化以后也被称为tls。

https的原理:client在访问server时,server会向client出具数字证书(该证书是由证书机构CA颁发的),证书内包含:持有者标识、序列号、公钥(n,e)、有效期、签发机构标识和CA的数字签名(数字签名可以保证信息的完整性、真实性和不可抵赖性,从而保证证书不被篡改)。此时,客户端会产生密钥K,并且在ssl层用服务器的公钥进行加密,经网络传到服务器端在ssl层经服务器的私钥进行解密,此时client与server就拥有相同的密钥K,接着client与server进行对称的加密解密的过程来进行信息传递。

apache 之站点安全_http

实现环境:rhel 5.4

需要软件包:httpd-2.2.3-31.el5.i386.rpm    

mod_ssl-2.2.3-31.el5.i386.rpm    

distcache-1.4.5-14.1.i386.rpm             此包被mod_ssl所依赖

bind-9.3.6-4.P1.el5.i386.rpm    

         bind-chroot-9.3.6-4.P1.el5.i386.rpm

         caching-nameserver-9.3.6-4.P1.el5.i386.rpm  

拓扑图:

apache 之站点安全_https_02


具体实现:

安装所需软件包:

    rpm -ivh  httpd-2.2.3-31.el5.i386.rpm      

    rpm -ivh  mod_ssl-2.2.3-31.el5.i386.rpm

    rpm -ivh distcache-1.4.5-14.1.i386.rpm

    rpm -ivh  bind-9.3.6-4.P1.el5.i386.rpm    

    rpm  -ivh  bind-chroot-9.3.6-4.P1.el5.i386.rpm

    rpm -ivh  caching-nameserver-9.3.6-4.P1.el5.i386.rpm

由于服务器需要证书,所以需要有证书颁发机构CA,所以要先搭建CA server,在linux上可以用openca和openssl实现CA,我们这里用的是openssl:

vim/etc/pki/tls/openssl.cnf            修改配置文件

45 dir             = /etc/pki/CA              指定所有文件的存放目录(绝对路径)

46 certs           = $dir/certs               指定存放证书的目录

47 crl_dir         = $dir/crl                 指定吊销的证书存放目录

48 database        = $dir/index.txt           数据库索引文件

51 new_certs_dir   = $dir/newcerts            默认放置新发行的证书的目录

53 certificate     = $dir/cacert.pem          CAserver的证书

54 serial          = $dir/serial              初始证书序列号(以后每发行一个证书在此基础上+1)

58 private_key     = $dir/private/cakey.pem   CA私钥的存放位置


88 countryName             =optional          

89 stateOrProvinceName     = optional              

90 organizationName        = optional              

135 countryName                     = Country Name (2 lettercode)

136 countryName_default             = CN

137 countryName_min                 = 2

138 countryName_max                 = 2

140 stateOrProvinceName             = State or Province Name (fullname)

141stateOrProvinceName_default     = HENAN


143 localityName                    = Locality Name (eg, city)

144 localityName_default            = ZHENGZHOU

上面的certs  crl   newcerts目录和index.txt   serial文件都不存在,所以此处需要在目录/etc/pki/CA下创建:

mkdir  certs crl   newcerts

touch  index.txt  serial

echo  “01”> serial         给serial一个初始值

为CA server产生私钥:

openssl   genrsa 1024 >private/cakey.pem

chmod  600  private/cakey.pem                  修改私钥的权限

为CA server产生证书:

openssl req -new -keyprivate/cakey.pem -x509 -out cacert.pem

apache 之站点安全_http_03


现在我们修改web server的配置文件/etc/httpd/conf/httpd.conf

#Listen 80                                   禁用80端口

cd  /var/www/html                              进入此目录

echo  “welcome to my home” >index.html       产生首页

为web  server 颁发证书:

mkdir    /etc/httpd/certs                  创建存放web证书及密钥的目录

cd       /etc/httpd/certs                  切换目录

openssl   genrsa  1024 >httpd.key         为web server产生私钥

chmod    600    httpd.key                 修改私钥的权限值

openssl   req  -new  -key  httpd.key  -out  httpd.req      产生证书的请求文件

apache 之站点安全_https_04

openssl   ca   -in  httpd.req    -out  httpd.cert          CA签发请求文件形成证书

apache 之站点安全_站点安全_05

将证书与web server进行捆绑,修改/etc/httpd/conf.d/ssl.conf文件

    112  SSLCertificateFile      /etc/httpd/certs/httpd.cert      指明证书存放的位置

    119  SSLCertificateKeyFile   /etc/httpd/certs/httpd.key       指明私钥存在的位置

    128  SSLCertificateChainFile /etc/pki/CA/cacert.pem           指明CA的证书所在位置


DNS  server的配置:

    cp -pnamed.caching-nameserver.conf named.conf  拷贝配置文件的样例文件

    vim /var/named/chroot/etc/named.conf             修改配置文件

    15         listen-on port 53 { any; };

    27         allow-query     { any; };

28        allow-query-cache { any; };

37        match-clients      { any; };

38         match-destinations { any; };

vim /var/named/chroot/etc/named.rfc1912.zones      修改区域声明文件,添加一个abc.com的域

apache 之站点安全_站点安全_06

进入/var/named/chroot/var/named目录下:

cp  –p  localhost.zone  abc.com.zone              拷贝一个区域文件

vim   abc.com.zone                                      修改区域文件

apache 之站点安全_https_07

客户端进行访问测试:

apache 之站点安全_https_08

安装证书,使证书颁发机构成为信任机构:

apache 之站点安全_http_09

apache 之站点安全_http_10

apache 之站点安全_https_11

apache 之站点安全_http_12

apache 之站点安全_站点安全_13

apache 之站点安全_https_14

  再次访问https://www.abc.com

apache 之站点安全_站点安全_15