Apache从HTTP到HTTPS的实现

来源:互联网 发布:asp.net入门编程实例 编辑:程序博客网 时间:2024/05/21 09:29

介绍

HTTPS和http是什么关系呢?相信很多人都有这个疑问,简单的说HTTPS=http+tls,http我们都知道,就是远程将数据显示在浏览器上的协议,tls是什么呢?安全传输层协议(TLS),简单的说,就是用于在两个通信应用程序之间的数据加密作用的。在重要场合,比如金钱交易等安全性要求高的网站,都会使用HTTPS协议。
接下来,我们yum安装Apache,重点在其上面实现https。

实验环境

操作系统:CentOS7.3
Httpd:2.4.6

httpd的安装

因为yum源中有httpd,我们就直接安装吧

yum -y install httpd

TLS实现

我们的httpd已经安装好了,那怎么让tls和httpd结合呢?
tls是Apache的模块,要想实现,只需要安装此模块即可。

TLS模块安装

yum -y install mod_sslsystemctl restart httpd

此时HTTPS已经实现了,哇,就这么简单?是的就是这样简单,你可以用浏览器访问一下https://IP/index.html,看是不是已经实现了。返回一个非安全链接就对了。为什么是非安全链接呢?就涉及到证书了,请继续向下看。

证书

tls的加密其实用的是非对称加密。什么是非对称加密呢?
简单的说就是使用不同的秘钥进行加密和解密。对称加密具体怎么实现,什么原理,这里我不能继续深入讲解了,自行百度吧。

在双方通讯的过程中,数据的加密需要依赖于对方的公钥,这样对方拿到数据就可以使用自己的私钥解密了。因此就需要保证公钥的确是对方给出的公钥,就需要一种可靠的机制,这种机制就是证书。证书相当于中间人的角色。

那么怎么确保中间人的身份是否合法?在安装操作系统时候,系统默认导入了信任的一些根证书,利用这些根证书,一级一级向下证明,即可实现中间人“证书”的身份。证书的颁发机构就叫做CA。

我们刚刚在在浏览器访问时候,不让访问的原因是,在安装mod_ssl 这个模块时候,已经默认自建了证书,不过这个证书是自己给自己颁发的证书,我们浏览器上并没有信任此证书,所以就不让访问了。
为了模拟真实场景,我们从自己搭建证书颁发机构,然后自己申请证书。

自建证书颁发机构CA

另找一台机器做CA,这里我使用CentOS6.9
我们要申请证书,首先要有个证书颁发机构,实际生产中,我们并没有权限去自建CA。这里为了实验使用,我们自建一个CA。

1、生成私钥文件:/etc/pki/CA/private/cakey.pem

(umask066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)##为了直接指定文件的权限,我们使用小括号包含起来,以达到umask临时生效。##后面的2048指定的是对称秘钥的长度。从1024-4096位,需要是1024的整数倍。

2.生成自签证书

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650##指定自签证书的生效时间

如下图:

3.提供辅助文件(没有这两个文件,在签署证书时候会报错)

touch /etc/pki/CA/index.txt(生成证书索引 数据库文件)echo 01>/etc/pki/CA/serial##01代表将要签署的证书的编号,必须是16进制的两位数,此处是指第一个要签署的证书的编号是01

申请证书

在另一台主机上申请证书

1.生成私钥文件

(umask066; openssl genrsa -out /etc/pki/CA/private/test.key 2048)

2、生成证书请求

openssl req -new -key /etc/pki/CA/private/test.key -days 365 -out /etc/pki/CA/test.csr

注意:
(1)此处和之前生成自签证书时候少了一个-x509选项
(2)这里的-days 365无效,实际上是CA决定证书期限
(3)默认国家,省,公司名称三项必须和CA一致,因为在默认CA配置文件/etc/pki/tls/openssl.cnf中,默认策略policy=policy_match要求这三项是match,如果将这三项改为optional,或者改policy=policy_anything则不要求一致。
(4)为某网站填写申请证书时候,主机名必须填写对应的网站域名,这里填写的是centos7

3.将请求证书发送给CA

scp /etc/pki/CA/test.csr ip:

4.CA开始签署请求证书

CA得到申请文件,就可以利用那个文件来颁发证书了

openssl ca -in /tmp/test.csr -out/etc/pki/CA/certs/test.crt -days 365


此时会在/etc/pki/CA/newcerts/中生成一个对应序列号的证书备份此处为01.pem,在吊销证书时候会用到。

5、将证书和私钥文件发到http服务器主机

我这里使用的是httpd的主机申请的证书,只需要将在CA主机上生成的证书复制到本机即可。
这里私钥文件路径/etc/pki/tls/private/test.key
证书文件路径/etc/pki/tls/certs/test.crt

6、配置使用自己申请的证书

配置文件:/etc/httpd/conf.d/ssl.conf
编辑他,修改以下几个参数
(1)DocumentRoot ,如果使用默认的文档路径,则不需要指定
(2)ServerName 指定服务器的FQDN,这里指定为centos7,因为申请的证书主机名为centos7
(3)SSLCertificateFile指定证书路径
(4)SSLCertificateKeyFile 指定生成证书时候的私钥文件

vim /etc/httpd/conf.d/ssl.confsystemctl restart httpd

测试

直接访问

1、修改hosts文件,为centos7指定ip地址
hosts文件的路径是C:\Windows\System32\drivers\etc,如果不是管理员Administrator用户,修改不了,建议使用notepad++类的软件,可以自动获取到Administrator权限。

2、浏览器访问,发现依然是不允许连接,此时查看证书,如下图:

将CA根证书复制到Windows主机,并添加信任

1、复制CA证书到Windows主机上,路径是/etc/pki/CA/cacert.pem
2、将cacert.pem修改后缀名为crt
3、双击证书,开始安装





4、发现访问成功
导入成功后,我使用谷歌和火狐刷新不成功,我换了个ie,于是成功了,好心塞-_-

原创粉丝点击