【实现ssl最简单的方法就是自己给自己颁发证书,自签名证书,用自签名证书非常简单,只需要安装一个软件包叫mod_ssl,装完以后用rpm -ql mod_ssl看一下,发现里面的文件已经调用了证书信息,而这个证书是通过一个脚本实现的(rpm -q –scripts mod_ssl)现在已经有证书文件了(ll /etc/pki/tls/certs)私钥文件也有了(ll /etc/pki/tls/private/localhost.key),要想加密,完全可以用私钥文件来做,步骤是:1,vim /etc/httpd/conf.d/ssl.conf ,看一下里面的内容都已经很完整了,不用再添加任何东西了,2,重启服务([root@centos7 ~]#systemctl restart httpd),3,测试 curl -k https://192.168.37.106 ,其中-k是忽略证书检查4,当你用浏览器访问的时候会警示说这是不安全的网站,所以这种方式还是没有什么意义,下面我们用正常的方式来搭建CA(向CA申请证书而不是自签名证书)】
先搭建CA(在7的机器上,这里的7机器形如C机器)
第一步:创建证书pki:先进入到目录里,cd /etc/pki/CA
touch serial ,echo 00> serial (往文件里写入版本号,版本号随意写)
touch index.txt (先创建,以后再写入内容)
tree
第二步:创建私钥,(umask 066;openssl genrsa -out private/cakey.pem 4096)其中红色字体是指定私钥存放位置且文件名必须叫做cakey.pem,4096是指定私钥位置长度,这里没有给私钥设置加密口令
tree 看一下私钥文件生成了
第三步:实现自签名
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
这样自签名的CA证书就有了
接下来需要在web服务器上申请证书(在6的机器上,这里的6形如B机器,充当web服务器)先安装rpm -ql mod_ssl
yum install mod_ssl
第一步:证书文件最好放在httpd自己的文件下/etc/httpd/conf.d/,当然也可以自己建一个文件夹专门用来放证书文件mkdir /etc/httpd/conf.d/ssl/
第二步:生成私钥:(umask 066;openssl genrsa -out /etc/httpd/conf.d/ssl/httpd.key 2048)
第三步:申请证书:openssl req -new -key /etc/httpd/conf.d/ssl/httpd.key -out
/etc/httpd/conf.d/ssl/httpd.csr
第四步:把请求文件复制到CA(7的机器)上去 scp /etc/httpd/conf.d/ssl/httpd.csr 7的ip地址:/etc/pki/CA/
在7的机器上
第四步:颁发证书:openssl ca -in httpd.csr -out certs/httpd.crt -days 300
在这一步如果前面写的公司名,国家,省不一致就会出错,解决方法是可以重新颁发证书也可以把配置文件改一下,改为允许不一致就可以了vim /etc/pki/tls/openssl.cnf
可以看到国家,省,公司必须一致
第五步:把证书文件拷贝给web服务器使用,这里的web服务器就是6的机器
scp certs/httpd.crt 6机器的ip地址:/etc/httpd/conf.d/ssl/
第六步:CA自己的证书文件也要拷过来 scp cacert.pem 6的ip地址:/etc/httpd/conf.d/ssl/
到此,整个申请过程就结束了
在6的机器上
第五步:确认一下证书是不是都有了cd /etc/httpd/conf.d/ssl
第六步:更改web服务器(6就是web服务器)自己的配置文件
vim /etc/httpd/conf.d/ssl.conf (更改文件路径)
SSLCertificateKeyFile /etc/httpd/conf.d/ssl/httpd.key
SSLCertificateFile /etc/httpd/conf.d/ssl/httpd.crt
第七步:添加一条CA的路径
vim /etc/httpd/conf.d/ssl/httpd.crt
service httpd reload 重新加载服务
现在可以测试一下了,在7的机器上,如果你想用域名访问可以在/etc/hosts文件里添加,用来代替设置DNS ,vim /etc/hosts
6的ip地址 www.magedu.com (写一条ip和域名的映射关系)
用浏览器访问,安装证书
需要更改windows机器的host文件
添加一条ip地址到域名的映射记录
curl –cacert cacert.pem https://www.magedu.com/
测试基于https访问相应的主机
openssl s_client -connect www.mgedu.com:443 -CAfile /etc/pki/CA/cacert.pem
GET / http/1.1
host:www.mageddu.com
以上就是https的实现
如果我们把http的端口关掉那么用户敲http时就访问不了,必须敲https才能访问,
通过编辑httpd的配置文件,把监听80端口那行注释掉就可以了vim /etc/httpd/conf/httpd.conf
# Listen 80
但是这样会影响用户访问,可以设置让访问http跳转到https(以保证安全)这样才是最好的方法
vim /etc/httpd/conf.d/test.conf (也可以写在主配置文件里) 以下是设置临时跳转
Redirect temp / https:/www.magedu.com/
当你在浏览器中敲http://www.magedu.com时就会跳转到https://www.magedu.com
这里顺便讲一下HSTS
HSTS是什么?HSTS(HTTP Strict Transport Security)国际互联网工程组织IETE正在推行一种新的Web安全协议
有什么用?HSTS的作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接。
比如,https://xxx 的响应头含有Strict-Transport-Security: max-age=31536000; includeSubDomains。这意味着两点:在接下来的一年(即31536000秒)中,浏览器只要向xxx或其子域名发送HTTP请求时,必须采用HTTPS来发起连接。比如,用户点击超链接或在地址栏输入 http://xxx/ ,浏览器应当自动将 http 转写成 https,然后直接向 https://xxx/ 发送请求。在接下来的一年中,如果 xxx 服务器发送的TLS证书无效,用户不能忽略浏览器警告继续访问网站
HSTS可以很大程度上解决SSL剥离攻击,因为只要浏览器曾经与服务器创建过一次安全连接,之后浏览器会强制使用HTTPS,即使链接被换成了HTTP
另外,如果中间人使用自己的自签名证书来进行攻击,浏览器会给出警告,但是许多用户会忽略警告。HSTS解决了这一问题,一旦服务器发送了HSTS字段,用户将不再允许忽略警告。
不足:用户首次访问某网站是不受HSTS保护的。这是因为首次访问时,浏览器还未收到HSTS,所以仍有可能通过明文HTTP来访问。解决这个不足目前有两种方案,一是浏览器预置HSTS域名列表,Google Chrome、Firefox、Internet Explorer和Spartan实现了这一方案。二是将HSTS信息加入到域名系统记录中。但这需要保证DNS的安全性,也就是需要部署域名系统安全扩展。截至2014年这一方案没有大规模部署。
实现HSTS示例:
vim /etc/httpd/conf/httpd.conf
Header always set Strict-Transport-Security “max-age=300”
重启服务
测试:curl -I http://www.magedu.com
不管怎样,第一次总要走http,这就是HSTS的不足
https的具体实现
最新推荐文章于 2023-01-05 16:50:51 发布