HTTPS和http是什么关系呢?相信很多人都有这个疑问,简单的说HTTPS=http+tls,http我们都知道,就是远程将数据显示在浏览器上的协议,tls是什么呢?安全传输层协议(TLS),简单的说,就是用于在两个通信应用程序之间的数据加密作用的。在重要场合,比如金钱交易等安全性要求高的网站,都会使用HTTPS协议。 接下来,我们yum安装Apache,重点在其上面实现https。
操作系统:CentOS7.3 Httpd:2.4.6
因为yum源中有httpd,我们就直接安装吧
yum -y install httpd我们的httpd已经安装好了,那怎么让tls和httpd结合呢? tls是Apache的模块,要想实现,只需要安装此模块即可。
此时HTTPS已经实现了,哇,就这么简单?是的就是这样简单,你可以用浏览器访问一下https://IP/index.html,看是不是已经实现了。返回一个非安全链接就对了。为什么是非安全链接呢?就涉及到证书了,请继续向下看。
tls的加密其实用的是非对称加密。什么是非对称加密呢? 简单的说就是使用不同的秘钥进行加密和解密。对称加密具体怎么实现,什么原理,这里我不能继续深入讲解了,自行百度吧。
在双方通讯的过程中,数据的加密需要依赖于对方的公钥,这样对方拿到数据就可以使用自己的私钥解密了。因此就需要保证公钥的确是对方给出的公钥,就需要一种可靠的机制,这种机制就是证书。证书相当于中间人的角色。
那么怎么确保中间人的身份是否合法?在安装操作系统时候,系统默认导入了信任的一些根证书,利用这些根证书,一级一级向下证明,即可实现中间人“证书”的身份。证书的颁发机构就叫做CA。
我们刚刚在在浏览器访问时候,不让访问的原因是,在安装mod_ssl 这个模块时候,已经默认自建了证书,不过这个证书是自己给自己颁发的证书,我们浏览器上并没有信任此证书,所以就不让访问了。 为了模拟真实场景,我们从自己搭建证书颁发机构,然后自己申请证书。
另找一台机器做CA,这里我使用CentOS6.9 我们要申请证书,首先要有个证书颁发机构,实际生产中,我们并没有权限去自建CA。这里为了实验使用,我们自建一个CA。
如下图:
在另一台主机上申请证书
注意: (1)此处和之前生成自签证书时候少了一个-x509选项 (2)这里的-days 365无效,实际上是CA决定证书期限 (3)默认国家,省,公司名称三项必须和CA一致,因为在默认CA配置文件/etc/pki/tls/openssl.cnf中,默认策略policy=policy_match要求这三项是match,如果将这三项改为optional,或者改policy=policy_anything则不要求一致。 (4)为某网站填写申请证书时候,主机名必须填写对应的网站域名,这里填写的是centos7
CA得到申请文件,就可以利用那个文件来颁发证书了
openssl ca -in /tmp/test.csr -out/etc/pki/CA/certs/test.crt -days 365此时会在/etc/pki/CA/newcerts/中生成一个对应序列号的证书备份此处为01.pem,在吊销证书时候会用到。
我这里使用的是httpd的主机申请的证书,只需要将在CA主机上生成的证书复制到本机即可。 这里私钥文件路径/etc/pki/tls/private/test.key 证书文件路径/etc/pki/tls/certs/test.crt
配置文件:/etc/httpd/conf.d/ssl.conf 编辑他,修改以下几个参数 (1)DocumentRoot ,如果使用默认的文档路径,则不需要指定 (2)ServerName 指定服务器的FQDN,这里指定为centos7,因为申请的证书主机名为centos7 (3)SSLCertificateFile指定证书路径 (4)SSLCertificateKeyFile 指定生成证书时候的私钥文件
vim /etc/httpd/conf.d/ssl.conf systemctl restart httpd1、修改hosts文件,为centos7指定ip地址 hosts文件的路径是C:\Windows\System32\drivers\etc,如果不是管理员Administrator用户,修改不了,建议使用notepad++类的软件,可以自动获取到Administrator权限。 2、浏览器访问,发现依然是不允许连接,此时查看证书,如下图:
1、复制CA证书到Windows主机上,路径是/etc/pki/CA/cacert.pem 2、将cacert.pem修改后缀名为crt 3、双击证书,开始安装 4、发现访问成功 导入成功后,我使用谷歌和火狐刷新不成功,我换了个ie,于是成功了,好心塞-_-