Apache的安全方案与证书实施
安装Apache服务,并保证正常启动,
[root@localhost ~]# yum --disablerepo=\* -enablerepo=c6-media install httpd
对网站安全访问的控制
安装好之后我们可以先做个静态的小页面测试一下;如图
此时,网段内的所有机器是都可以访问的,接下来我们要进行网站的安全控制
对网站安全访问的控制
首先我们要在以下目录下修改Apache的配置文件,
之后去创建一个httpd的关于验证的说明文件(路径为/var/www/html/)内容如下:
然后在www目录下用htpasswd -c 来创建一个用户账号 并用 .htpasswd指明文件存放路径
重启Apache后,
[root@localhost www]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
再此访问效果如下,需要账户和口令
访问的来源控制 :
修改/etc/dhcpd/conf/dhcpd.conf的相关控制字段
在该文件的配置中这一语段表示允许与拒绝的字段,并用order对deny和prime的先后进行定义,然后我们要做如下修改,表示先比配allow后匹配deny,deny后可跟你要拒绝的主机ip或网段
(注意,本例中对192.168.1.177的限制是无效的)
在做证书管理之前,我们要先清除一下概念
证书管理机构――CA
CA是PKI系统中通信双方都信任的实体,被称为可信第三方(Trusted Third Party,简称TTP)。CA
作为可信第三方的重要条件之一就是CA的行为具有非否认性。作为第三方而不是简单的上级,就必须
能让信任者有追究自己责任的能力。CA通过证书证实他人的公钥信息,证书上有CA的签名。用户如果
因为信任证书而导致了损失,证书可以作为有效的证据用于追究CA的法律责任。正是因为CA愿意给出
承担责任的承诺,所以也被称为可信第三方。证书中绑定了公钥数据、和相应私钥拥有者的身份信息,并带有CA的数字签名。证书中也包含了CA的名称以便于依赖方找到CA的公钥、验证证书上的数字签名。
验证证书的时候,需要得到CA的公钥。用户的公钥可以通过证书来证明,那CA的公钥如何获得呢?可
以再让另一个CA来发证书,但最终总有一个CA的公钥的获得过程缺乏证明。PKI技术并不把这样一个
循环问题留给自己,而是依赖其它的安全信道来解决。因为CA毕竟不多,可以通过广播、电视或报纸
等公开的权威的媒介,甚至通过发布红头文件的方式来公告CA的公钥。
公告CA的公钥可以有多种形式,为了兼容程序的处理,人们一般也以证书的形式发布CA的公钥。CA给
自己签发一张证书,证明自己拥有这个公钥,这就是自签名证书(Self-Signed Certificate)。
与末端实体的证书不一样,在尚未确定CA公钥时,CA自签名证书其实不是真正的数字证书,而仅仅是
拥有证书形式的一个公钥。所以CA自签名证书必须从可信的途径获取。例如,任何人都可以产生一对
公私密钥对,并声称自己就是LOIS CA,然后签发一张自签名证书、并通过网络随意传播。CA自签名
证书可以通过权威媒体或面对面USB硬盘等进行传输。
用户拥有CA自签名证书之后,就可以离线地验证所有其它末端用户证书的有效性,获得其它实体的公
钥、进行安全通信。
CA是负责确定公钥归属的组件,所以CA必须得到大家的信任才能充当这样的角色,其确定公钥归属的
技术手段也必须是可靠的。CA通过证书方式为用户提供公钥的拥有证明,而这样的证明可以被用户接
受。在PKI中,CA也具有自己的公私密钥对,对每一个“公钥证明的数据结构”进行数字签名,实现公钥获得的数据起源鉴别、数据完整性和非否认性。用于公钥证明的数据结构,就是数字证书。
CA(Certificate Authority)是数字证书认证中心的简称,是指发放、管理、废除数字证书的机构。
实施步骤:
在/etc/pki目录下查看公钥的基础设施是否存在,
在CA的默认参数文件中,CA目录中所有的证书都保存在这个目录中,certs是保留那些正在发行的证书
而从的配置文件中我们可以看到,我们还需要手动创建一些目录,
而这一切的产生都需要依赖于openssl工具才行,但在openssl 的配置文档中(安装后在/etc/pki/tls/openssl.cnf),
文件介绍:
certs是保留那些正在发行的证书,而在crl_dir主要存放的是证书吊销列表,
index。txt文件是一个CA作为发行机构,没发行一个证书就会在这个文件中记录下来,
new_certs_dir = $dir/newcerts 表示对那些新的未发行证书缺省的存储空间方式,可以理解为一些新的证书请求的存放处,
certificate = $dir/cacert.pem 中存放我们这个证书颁发机构自己的“证书”
serial = $dir/serial指当前发放的证书的序列号,这个目录是没有的所以我们要手工创建,并给于初始值01, 01表示16进制,并输入给serial
crlnumber = $dir/crlnumber表示证书吊销列表的序列号
private_key = $dir/private/cakey.pem表示证书公钥的所在文件
而我们要一个证书机构能够工作,就必须要它有自己的“证书”,还要有自己的私钥
我们要先了解它工作时的有关需要,所以要手工创建以下内容:
接下来,利用openssl完成私钥的产生工作,openssl genrsa 1024 命令来产生私钥,命令表示,产生基于rsa算法的 1024长度私钥,但产生的结果比不会直接输出,而是经过base64编码之后的结果,如图
但是这样做并不能产生我们需要的文件,所以我们要将他重新输出重定向到一个私钥文件中去
作为证书的保存要找一个合适的目录,以安全存放,私钥必须严格保密
所以,我们还要对私钥进行权限的改写,确保安全,如下
[root@localhost CA]# ll ./private/
total 4
-rw-r--r--. 1 root root 887 Jan 19 03:07 cakey.pem
[root@localhost CA]# chmod 600 ./private/cakey.pem
[root@localhost CA]# ll ./private/
total 4
-rw-------. 1 root root 887 Jan 19 03:07 cakey.pem
要产生一个新的证书要依赖证书上的公钥,所以命令的意思为,请求产生一个新的公钥,公钥从哪来?从私钥中提取,证书格式为-X509格式,-out输出这个证书,并命名为cacert.pem(注意这的证书名字要与配置文件中的一致),如图
然后按提示输入,国家,省份,公司等信息(这些可以在配置文件的[ req_distinguished_name ]字段中进行缺省值的改写)邮件地址可以不填写
web服务器要想获得证书,首先还要有请求文件,而且要留下公钥作为比对及发行的凭证,
作为证书的保存要找一个合适的目录,以安全存放,私钥必须严格保密
当我们作为一个证书的颁发机构成立后,接下就是接受符合我们规则的一些请求,但这些规则在初始时可能我们做一些修改,所以要修改策略,让请求能够进来
改变CA的策略匹配,在CA的匹配策略文件中,有一些匹配的要求项目我们要做一些修该,否则可能申请不到证书,(我们作为证书的颁发机构,可能在颁发时有匹配要求),
在这些完成之后就是证书的申请阶段,首先由申请方产生请求文件
然后我们会在目录下看到一个请求文件
然后在CA中我们处理请求文件(此时是同一台机器上),如图批准请求文件,由我们(CA)颁发(签署)证书;
此时当我们签署证书后会在证书的发放文件中看到有关的记录,比如,证书编号。类型等
[root@localhost etc]# cd ..
[root@localhost /]# cd /etc/pki/CA
[root@localhost CA]# cat index.txt
V150118202443Z01unknown/C=cn/ST=beijing/O=cde/OU=tec/CN=www.cde.com
得到证书后就是web服务器和证书的捆绑,(类似于发布),此时我们的HTTPd为了完成这一功能要调用一个模块,我们需要安装它
安装完模块后,我们要让httpd能够去调用这些模块,所以要在模块的配置文件中进行修改
,主要是为HTTP指明证书的所在位置,公钥和私钥的具体存放路径;
如图,打开模块加载功能,打开安全端口
然后分解在地105行和112行指明我们具体cert文件和钥匙文件的存放目录
修改完配置文件后,我们重启服务,并查看相应端口情况
接下测试,找到一台主机的浏览器,首先可以看到我们的时间三个选项都不对,时间我们可以很方便在主机上修改,同样的其它两项也可以修改,
之后我们要修改一个mod_ssl配置文件下一个叫chain的量,叫证书卷的概念,又叫机构证书,把他
打开并把那行改为我们的证书卷存放目录,解决我们证书颁发机构的问题
关于证书不信任的问题我们可以在浏览器中也可以手动安装我们的证书,
之后的域名不匹配,当我们确认地址无误的时候我们可以点强制相信,完成正常访问,效果如图所示: