一、访问控制
1、要想实现用户访问控制,首先改动下面的这项为all,即允许用户访问控制:
身份验证的的原理是在服务器端有一个用户的文件,记录了一些允许访问的用户,如果不在这个文件内的用户无法访问。
2、首先在要保护的网站的主目录里面建立一个说明文件,这个文件时一个隐含文件,名字是固定的必须是".htaccess",这个文件的额目的是说明如何对来访者的身份进行验证的:
在这个文件里面要编辑上一下主要的语句:
authuserfile /var/www/.usrfile //记录用户文件的名字和路径,注意此时这个文件还不存在
authtype basic //身份验证的方式,这里是基本验证方式
authname "please input your name and passwors" //用于提示用户的对话框
require valid-user //规定只有有效的账户才可以登录
3、下面就要产生.usrfile文件
这个文件时通过指令htpasswd产生的,注意有个-c参数,这个就达到新建这个文件:
到在此添加用户的时候,就不再需要-c参数了:
这时候查看.usrfile,可以看到两个文件已经被添加成功:
重新启动httpd服务,在windows里面测验:
当输入账号和密码的时候可以顺利访问。
二、来源控制(基于ip的访问控制)
当数据包来的时候,可以看到源ip地址,就是基于源ip地址的控制,可以控制单个ip、可以控制一个子网或者是某个ip段。
<Directory "主目录">
Order allow,deny //要注意order与deny的顺序
Allow from all
</Directory>
只需将拒绝的地址和允许的地址写在里面即可,可以通过查看日志看到:
三、加密访问 https
1、 Ssl的工作原理:
注意第四步的时候,客户机用服务器的公钥加密时,私钥也放在了里面,这样服务器就可以得到私钥,进行解密。
如何实现这个过程呢?用linux自带的openca来实现。
首先进入一个目录编辑一个文件:
进入到tls目录中去,有一个openssl.cnf文件,编辑这个文件,主要要编辑的内容如下:
[ CA_default ]
44
45 dir = /../../CA //这里要改为:/etc/pki,
46 certs = $dir/certs //已经发行的证书放的位置,$dird相当于/etc/pki/CA
47 crl_dir = $dir/crl //吊销列表
48 database = $dir/index.txt //数据库
51 new_certs_dir = $dir/newcerts
53 certificate = $dir/cacert.pem //证书存放地,指的是发证机关的证书‚
54 serial = $dir/serial //初始号码
58 private_key = $dir/private/cakey.pem //私钥放置的位置,
注意上面的目录crl certs newcerts和文件index.txt serial要自己创建:
给serial一个初始值:
用这指令生成一个密钥:
Gen表示生成密钥,rsa指的是非对称算法,1024指的是位数,注意存放位置与上面对应。
修改文件的属性:
密钥已经产生了,下面又密钥来产生证书,用下面的固定指令:
注意上面的证书的存放的位置是有上面的‚决定的,下面会出现如下,让输入如下的信息:
可以修改这些参数的默认值,在ssl.conf文件中进行修改:
还有一个很重要的参数,将下面的88—90改成如图的这样,否则这个CA将只允许本国的本省的本单位的申请证书:
综上,CA就建立好了,共有三大步:一、编辑/etc/pki/tls/openssl.cnf 改动一个路径,新建三个目录两个文件。二、通过指令openssl gensra 1024 >/private/cakey.pem得到一个密钥,在58行。三、通过这个密钥得到证书,指令是openssl req -new - key private/cakey.pem -x509 -out cacert.pem -days 3650. 注意第二三步后面的目录是由openssl中决定的。
现在CA有了,相当于有了发证的机构,web向这个CA申请证书,但是申请证书必须要有密钥,在web服务器共有三步。一:获得密钥。二:申请证书。三:获得证书。
1、建立一个总目录,将下面要新建的一些文件都放在里面,便于管理:
2、通过指令openssl gensra 1024 获得密钥,并且重定向到文件http.key,名字这是自己起的并且自动生成
看一下权限:
为安全改动权限:
3、由密钥来请求证书,用下面的指令,http.csr是一个请求文件自命名:
然后输入系列下列的参数,请求完成:
4、最后由这个请求来获得证书[root@localhost cert]# openssl ca -in http.csr -out http.cert
可以讲整个cert目录的权限改成600,以保证安全!
5、web端要支持ssl,必须安装支持ssl的包:
6.安装完成上面的包后,会在下面Apache的配置文件下发现多了一个ssl.conf文件:
7.vim ssl.conf:
由此可见ssl与http是模块结合的,并且端口是443.
可见ssl有自己的日志系统,进入与无法进入可以由这两个日志来看。
最重要的是这个文件必须指明证书和密钥的位置,通过下面这两个位置:
这两项看上面的2和4目录。
下面在一个进行windows2003中访问:
我的web服务器地址192.168.93.10,在windows2003中的ie进行访问:
得到如下的结果:
如果点击是可以进行强制访问,这时候所产生的一切后果自己负责。为什么会这样呢?因为该证书不是可信任的机构的颁发的,怎样才能成为可信任的颁发机构:通过mms控制台或IE浏览器可以查看可以信任的站点:
让一个机构成为可信任的机构:
首先要在这个路径中显示机构的名称:进入到lls.conf文件中编辑如下一行:
其中后面的路径就是CA机构的证书,重新启动Apache,得到如下:
进行安装:
安装之后,再次访问:
因为访问的时候是通过192.168.93.10访问的,如果通过www.zhuzhu.com来访问就不会有这样的问题了,但是必须有dns可以解析www.zhuzhu.com和192.168.93.10的关系,这里做一个小实验,利用本地hosts文件来看一下:进入C盘WINDOWS>system32>drivers>etc>hosts;
在hosts文件里将www.zhuzhu.com 192.168.93.10写上去,然后通过https://www.zhuzhu.com来访问,结果如何呢?上面的信息提示都不会有直接可以进入页面中去。
如何只允许密文访问?只需要关闭80端口:
编辑/etc/httpd/conf/httpd.conf
这样明文就访问不到了!