apache的web安全三部曲
古云"蜀道之难,难于上青天~"在我这个刚入门不就得来说,想要维护一个网站的安全还真的挺不容易的,我们要时刻关注最新的安全动态,关注系统的漏洞,并积极的做好应对,对于一个网管,网站的维护,是比较重要的一个工程,先不论一些高层次的安全保护措施,对于httpd服务的基本安全措施,我们是应该好好掌握的,否则好不容易架起来一个网站,分分钟被一些电脑爱好者们给攻破了---------------》那那那就尴尬了。。。
那么当我们架好一个网站之后,怎样去配置他的安全性呢??
在linux中,我们有这样三种方法:
1.身份验证:对要在网页上执行操作的用户,进行身份验证,验证其合法性,真实性。
2.来源控制:某些东西比如公司的机密,我们是不能让外来人登录并查看的,假设:单位团队好不容易研发出了科技成果,一个外界用户一个"另存为",或者"复制,粘贴"给考走了,那真是。。。。。
3.ssl套接层:也就是我们常常发现的网页上url的http变成了https,在有关金钱交易的购物网站上用的很多很多。
那下面我们就来看看如何走好这三部曲!!!
第一部曲:身份验证
要实现身份验证大致的流程:
A.在站点的主目录下写说明文件.htacess,说明的内容当然就是要进行身份验证了,这里有四个部分。
authuserfile /var/www/.htpasswd说明对用户身份验证,但是要创建用户验证账号库,但这里的与系统的账号库不是一个。
authname "please input youusername and passwd!!"弹出验证的端口,要求用户输入口令
authtype 验证的类型
required 要求什么样的用户可以访问
B.产生账号文件
htpasswd -c .htpasswd 账号名;使用该命令新建用户账号【注意-c 参数只用添加一次就好】
1.修改配置文件,httpd.conf
在 AllowOverride 设置为 None 时, .htaccess 文件将被完全忽略。当此指令设置为 All 时,所有具有 ".htaccess" 作用域的指令都允许出现在 .htaccess 文件中。
2.创建站点的首页
[root@localhost html]# echo"welcome to lining's web" >> index.html
开启httpd服务,然后登陆,显示我们的测试页面。
3.配置身份验证
在网站根目录下 /var/www/html 建立 .htacss文件
4.在/var/www目录下,创建账号库文件,创建用户 lining
[root@localhostwww]# htpasswd -c .htpasswd lining
New password:
Re-type new password:
测试:
第二部曲------》来源控制
直接配置httpd.conf文件。
重启httpd服务,测试。
在这里我们进入到了其他的页面,而不是我们的主页面,因为我被拒绝访问了。
第二部曲-----》网站的加密访问【https】
在访问网站的时候我们通常,使用的是http开头的网站,http提供的是明码的传送方式,十分不安全。所以我们需要让他进行密文的传输,来提供安全性。
但是当我们浏览银行网站的时候,就变成https的网站。那么https是怎么实现的呢???
答:它是通过安全套阶层协议 ssl 实现的。
那么我们在linux中又怎么实现安全套阶层呢??
答:在linux要实现安全套接层时间加密访问我们就需要知道两样东西。
1.openssl命令的使用
2.PKI公钥基础设施
首先我们来了解一下openssl命令的使用。
1.查看openssl的文件目录,使用rpm -ql openssl命令。
查看openssl的功能,包括对称加密,非对称加密,校验等等功能!!!
2.摘要的做法【使用md5】。摘要的用途,可以用来检验内容的完整性,当我们使用MD5算法对内容进行运算,产生一个定长的摘要,我们可以将摘要和内容发给接收方,接收方通过再次计算摘要,对比两份摘要来确定内容是否被更改过。
【小例子】
复制inittab到以我的名字命名的文件夹,并做一个摘要。
[root@localhostlining]# openssl md5 inittab
MD5(inittab)=9d49303d50eb59151fc24eb0e3802232
更改inittab文件中的内容,再次做一个摘要。
[root@localhostlining]# openssl md5 inittab
MD5(inittab)=a30c76ea4096ab1eddf06657d4e9a590
3.加密 passwd【引入salt概念,当我们查看/etc/shadow文件时,你可能会发现,用户设置的密码在显示中是不一样的乱码,这些乱码就是由系统加密过得密码。系统通过添加一组字符串,然后混入输入的密码中,进行加密。】
4.对称加密/解密文件 des/des3
[root@localhost lining]# openssldes3 -a -in inittab -out f1 //用3倍des算法加密inittab文件,并将加密后的内容输出为f1文件。
enter des-ede3-cbcencryption password: lining //加密时所用的密码。解密是要用到。
Verifying -enter des-ede3-cbc encryption password: lining
[root@localhostlining]# openssl des3 -a -d -in f1 -out inittab2 //在此之前我删除inittab文件,将f1文件解密为inittab2 文件
enterdes-ede3-cbc decryption password:
[root@localhostlining]# ll
total 20
-rw-r--r-- 1root root 2288 Jul 11 03:44 f1
-rw-r--r-- 1root root 1665 Jul 11 04:11 inittab2
5.非对称加密 rsa【非对称算法中要用到公钥和私钥,私钥我们可以使用命令创建出来,公钥是从私钥中提取的】
首先产生公钥秘钥对~ 使用genrsa 1024 产生1024位的私钥,然后从私钥中提取公钥。
[root@localhostlining]# openssl rsa -in key.pem -pubout -out public.k //从私钥中导出公钥
writing RSA key
其次我们需要了解一下HTTPS在PKI上的运用:
由于PKI内容比较多所以暂不在本篇幅说明。。。。
那么现在我们就着手实现一个https的站点:
1.CA认证中心的实现,先修改openssl的配置文件【CA中心来对客户端进行验证并发放证书】
2.对于外部的客户端,他们需要请求证书,对于根CA,只需要 私钥----》请求文件
https默认使用端口443.所以要加装另外的模块。
[root@localhost~]# rpm -qa mod_ssl
mod_ssl-2.2.3-31.el5 //我的已经安装了这个模块我们之前说过,模块式动态加载的,也就是当你使用的时候,它自动加载,所以并没有什么操作。
然后再创建httpd的私钥请求文件以及证书
[root@localhosthttpd]# mkdir certs
[root@localhostcerts]# openssl genrsa 1024 > httpd.key //私钥文件
GeneratingRSA private key, 1024 bit long modulus
...++++++
...........................++++++
eis 65537 (0x10001)
[root@localhostcerts]# openssl req -new -in httpd.key -out httpd.req //请求文件
Generatinga 1024 bit RSA private key
...............................................................++++++
.......++++++
发放证书
[root@localhostCA]# cat index.txt //在证书数据库中更新了httpd证书的信息
V 140711013035Z 01 unknown /C=CN/ST=HENAN/O=MyCompany Ltd
httpd 和 证书捆绑:
[root@localhost CA]# vim /etc/httpd/conf.d/ssl.conf
112SSLCertificateFile /etc/httpd/certs/httpd.cert //指明站点的证书文件,用户也是要通过它来确定是否访问到了正确站点,而不是钓鱼网站
119SSLCertificateKeyFile /etc/httpd/certs/httpd.key //指明网站的公钥
登陆测试:
112SSLCertificateFile /etc/httpd/certs/httpd.cert
119SSLCertificateKeyFile /etc/httpd/certs/httpd.key
128SSLCertificateChainFile /etc/pki/CA/cacert.pem
继续修改配置文件ssl.conf,我们可以通过查看站点的证书链然后将证书导出安装到自己的计算机上面。从而实现客户端与服务器的加密访问。