Apache中https的详解及应用案例
一、https的简介
它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。
它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的安全全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。
二、https中的工作原理
https的工作原理过程,如图1所示:
图1:https的工作原理图
从上面的工作原理图可以看出:①客户端产生的密钥只有客户端和服务器端能得到。②加密的数据只有客户端和服务器端才能得到明文。③客户端到服务端的通信是安全的。
三、https中的两种加密算法
https的两种基本加密算法是:对称加密算法,非对称加密算法(公私钥加密),下面介绍这两种加密算法的特点:
1、对称加密算法:
对称加密的密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等,如图2所示:
图2:对称加密
2、非对称加密算法:
非对称加密的密钥是成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等,如图3所示:
图3:非对称加密
根据上面的两种加密方法,我们就可以设计一种无法让他人在互联网上知道你的通讯信息的加密方法,步骤如下:
①在服务器端产生一个公钥和私钥。
②客户端从服务器取得这个公钥。
③客户端产生一个随机的密钥。
④客户端通过公钥对密钥加密(非对称加密)
⑤客户端发送到服务器端
⑥服务器端接受这个密钥并且以后的服务器端和客户端的数据全部通过这个密钥加密(对称加密)
四、https的应用案例
案例(站点安全维护)
(1)实施环境:Centos 64为,PC机
(2)案例要求:
现有一个网站站点,要求允许某个网段的人访问,不允许其他人访问,并且访问要通过用户验证访问。
(3)实施拓扑图:
根据实施的要求使用绘图工具绘制出网络拓扑图,如图4所示:
图4:网络拓扑图
(4)案例实施:
案例的实施大致可以归纳为以下四点:
① httpd的安装和ssl模块的安装:
首先查看本机是否安装有httpd,如果有可以直接使用,如果没有则,先挂载光盘,然后进入光盘的软件包目录下查找安装包,最后进行安装。
//查看本机是否安装httpd
[[email protected] ~]# rpm -qa httpd //若果安装则下面会显示安装包,否则没有
//挂载光盘
[[email protected] ~]# mount /dev/cdrom /media/cdrom
mount: block device /dev/sr0 is write-protected, mounting read-only //显示光盘已挂载上
//进入光盘的安装目录下
[[email protected] ~]# cd /media/cdrom/Packages/
//查找有关httpd的安装包
[[email protected] Packages]# ll |grep httpd
-r--r--r--. 2 root root 840792 Feb 24 2013 httpd-2.2.15-26.el6.centos.x86_64.rpm //httpd的安装包
-r--r--r--. 2 root root 74100 Feb 24 2013 httpd-tools-2.2.15-26.el6.centos.x86_64.rpm //httpd工具安装包
//使用yum工具把这两个安装包安装上
[[email protected] Packages]# yum install httpd-2.2.15-26.el6.centos.x86_64.rpm httpd-tools-2.2.15-26.el6.centos.x86_64.rpm
//httpd的相关软件包安装完后,然后查找ssl模块,
[[email protected] Packages]# ll |grep ssl
-r--r--r--. 2 root root 92248 Feb 24 2013 mod_ssl-2.2.15-26.el6.centos.x86_64.rpm //这个就是要安装ssl模块
//安装ssl模块
[[email protected] Packages]# yum install mod_ssl-2.2.15-26.el6.centos.x86_64.rpm
//安装完后启动httpd服务
[[email protected] ~]# service httpd start
Starting httpd: [ OK ] //表明服务已启动
//永久开启httpd服务
[[email protected] ~]# chkconfig httpd on
//查看端口号
[[email protected] ~]# netstat -tupln |grep 80
tcp 0 0 :::80 :::* LISTEN 2469/httpd //表明httpd端口已开启
② 编辑身份验证:
httpd安装完后会产生一些配置文件,在这里首先找到配置文件所在的目录,然后编辑配置文件。
//进入/etc/httpd目录下
[[email protected] ~]# cd /etc/httpd
//查看该目录下的配置文件,可以看到两个存放置文件的目录
[[email protected] httpd]# ll
drwxr-xr-x. 2 root root 4096 May 14 14:47 conf //httpd的配置文件的存放位置。
drwxr-xr-x. 2 root root 4096 May 14 14:47 conf.d //额外的功能模块的配置文件存放位置
//打开配置文件存放位置conf目录下的httpd.conf配置文件
[[email protected] httpd]# vim conf/httpd.conf
//编辑该配置文件
打开文件后输入:,进入底行模式,在底行模式下输入set nu //显示行号,然后找到338行进行修改如下:
编辑完后保存退出,然后到主站点目录下编辑一个.htaccess文件,操作如下:
//进入到主站点目录下
[[email protected] httpd]# cd /var/www/html/
//编辑生成一个.htaccess文件
[[email protected] html]# vim .htaccess
//编辑该文件的内容如下:
编辑完后保存退出,又因为在上面编辑时用到了账号库,因此接下来创建账号库。
//查看账号库htpasswd所在的位置
[[email protected] html]# which htpasswd
/usr/bin/htpasswd //显示出了账号所在的位置
//查看账号库所属的软件包
[[email protected] html]# rpm -qf `which htpasswd`
httpd-tools-2.2.15-26.el6.centos.x86_64 //显示出账号库所属的软件包
//创建账号,操作如下:
//然后进入/var/www目录下看是否有.htpasswd
[[email protected] www]# ll -a // 加-a表示看所有文件包括隐藏文件
-rw-r--r--. 1 root root 40 May 14 15:39 .htpasswd //表示已生成账号库文件
//查看账号库文件的内容
[[email protected] www]# cat .htpasswd
user1:cKnI1SE/VKRjs
user2:w7nEdaxrZf94A //显示刚才已创建的账号
③ 编辑来源控制:
//打开配置文件存放位置conf目录下的httpd.conf配置文件
[[email protected] httpd]# vim conf/httpd.conf
//编辑该配置文件
打开文件后输入:,进入底行模式,在底行模式下输入set nu //显示行号,找到337行往下,然后编辑,编辑内容如下:
④ 利用非对称加密算法实现加密访问
加密包括非对称加密和对称加密,在上面的加密算法中已提到了两者加密算法的特点,我在这讲的是利用非对称加密算法实现的加密算法,非对称加密算法包括CA的实现和站点证书的生成,具体实现如下操作:
第一步:首先查看你的本机是否安装了openssl,如果未安装进行挂载光盘查找安装。
//查看本机是否安装openssl
[[email protected] ~]# rpm -qa |grep openssl
openssl-1.0.0-27.el6.x86_64 //从这里可以看到已经安装过了,那么就不需安装直接用。
第二步:编辑配置文件,操作如下:
//进入配置文件所在的目录下
[[email protected] ~]# cd /etc/pki/tls
//查看有没有要找的配置文件
[[email protected] tls]# ll
-rw-r--r--. 1 root root 10906 Oct 12 2012 openssl.cnf //可以看到这个就是我们要找的配置文件
//打开配置文件
[[email protected] tls]# vim openssl.cnf
//查看该配置文件内容如下:
打开文件后输入:,进入底行模式,在底行模式下输入set nu //显示行号,查看需要配置的内容如下:
从上面的配置文件中可以看到首先在/etc/pki/CA目录下创建两个文件index.txt和serial,然后再产生私钥和公钥。
//创建index.txt文件
[[email protected] CA]# touch index.txt
//创建serial文件
[[email protected] CA]# touch serial
//先产生私钥
[[email protected] CA]# openssl genrsa 1024 >private/cakey.pem
//查看该私钥文件
[[email protected] CA]# ll private/cakey.pem
-rw-r--r--. 1 root root 891 May 14 21:37 private/cakey.pem
//查看该私钥的内容
[[email protected] CA]# cat private/cakey.pem
//从查看私钥文件可以看出是不安全的,在这里要修改权限
[[email protected] CA]# chmod 600 private/cakey.pem
//从私钥中提取产生公钥,操作如下:
编辑完后公钥就产生了导出CA就实现了,接下来就是站点证书以及私钥的产生,操作如下:
//产生站点私钥
[[email protected] certs]# openssl genrsa 1024 >httpd.key
//生成站点请求文件
//让CA进行办法证书
[[email protected] certs]# openssl ca -in httpd.req -out httpd.cert
//查看生成的数据
[[email protected] CA]# cat index.txt
V150514150433Z00unknown/C=CN/ST=henan/O=12
//把证书与web进行编辑访问,编辑下列文件如下:
[[email protected] CA]# vim /etc/httpd/conf.d/ssl.conf
编辑完后保存退出,然后重启httpd服务,并查看端口。
//重新启动httpd服务
[[email protected] CA]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
//查看端口
[[email protected] CA]# netstat -tupln |grep httpd
tcp 0 0 :::80 :::* LISTEN 2799/httpd
tcp 0 0 :::443 :::* LISTEN 2799/httpd //从端口可以看出已经开启
因为我们这里使用的是https所以关闭80端口,操作如下:
//打开配置文件
[[email protected] ~]# cd /etc/httpd/conf
打开后然后找到136行把80端口关闭,然后重新启动服务,然后通过网页访问该服务如下:
然后点击安装此证书,然后就完成了。
(5)测试与验证:
在测试前在这里首先创建一个测试网页,具体操作如下:
//进入/var/www/html目录下
[[email protected] httpd]# cd /var/www/html/
//编辑创建测试网页
[[email protected] html]# echo "hello,my name is huangzhong" >index.html
编辑完创建测试网页后,然后进行测时如下:
在客户端上访问该网站,结果如下图:
然后我们在上面输入用户名user1,密码123登录后的结果如下图:
然后测试来源控制只允许192.168.2.101访问不允许其他2.0的网段访问该站点测试结果如下:
从上图可以看到它未访问到测试页面也就是说是不能访问该站点的。
Apache中https的详解及应用案例