WEB服务是互联网最常见的服务类型,随着技术的发展,安全是对用户来说头等大事,下面实验简单的还原了一下现在互联网最流行HTTPS的实现。
实验目的:
实现域名访问网页(DNS解析);
HTTPS的实现(私建CA,实现自签和证书颁发);
实现HTTP重定向HTTPS,HSTS;
实验准备:
前提:所有主机关闭防火墙和SELINUX。
HTTP SERVER:192.168.32.9,centos6.9;
DNS SERVER:192.168.32.111,centos7.3;
CA:192.168.32.111,centos7.3;
CLIENT:192.168.32.101,centos6.9;
搭建HTTP服务:
安装HTTP服务,也可以使用rpm或者自己编译安装
]#yum install httpd -y
2.启动服务,开机自启
]#service httpd start]#chkconfig httpd on
3.ss -tan查看80端口是否开启
4.添加主页文件
]#cd /var/www/html]#vim index.html/var/www/html/:wq
5.重启服务,本机测试
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M02/07/B9/wKiom1nOLrSRtrsLAAAYiTOijVw436.png-wh_500x0-wm_3-wmp_4-s_635207952.png" title="QQ图片20170929192548.png" alt="wKiom1nOLrSRtrsLAAAYiTOijVw436.png-wh_50" />
搭建DNS服务器
安装包,启动服务并设置开机自启
]#yum install bind -y]#systemctl enable named]#systemctl start named
2.ss -tan查看53端口是否开启
3.修改主配置文件,不绑定固定端口监听
]#vim /etc/named.conf listen-on port 53 { any; }; allow-query { any; };
4.添加要解析的域名
]#vim /etc/named.rfc1912.zoneszone "a.com" IN { type master; file "a.com.zone";};
5.添加解析库文件
]#vim /var/named/a.com.zone$TTL 1D@ IN SOA dns1 admin.xiaomage.com. ( 31 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS dns1dns1 IN A 92.168.32.111websrv IN A 192.168.32.9www IN CNAME websrv注意权限]#chown named:named a.com.zone
6.重启服务后 本机测试,修改本机DNS指向搭建的DNS地址
650) this.width=650;" src="https://s4.51cto.com/wyfs02/M02/A6/6B/wKioL1nONOnwJ-eVAAAX2feJi3c358.png-wh_500x0-wm_3-wmp_4-s_2617097726.png" title="微信截图_20170929195608.png" alt="wKioL1nONOnwJ-eVAAAX2feJi3c358.png-wh_50" />
CA的搭建
1.生成私钥
]#touch /etc/pki/CA/index.txt ]#echo 01 > /etc/pki/CA/seria]#(umask066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
2.生成自签名证书
]#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem]#openssl x509 -in cacert.pem -noout -text <===以文本形式查看证书
3.web服务器申请证书
]#/etc/httpd/conf.d/ssl]#cat /etc/pki/tls/openssl.cnf <===默认前三项必须和CA证书相同,可以进行修改。countryName = matchstateOrProvinceName = matchorganizationName = matchorganizationalUnitName = optionalcommonName = suppliedemailAddress = optional]#openssl req -new -key httpd.key -out httpd.csr
4. 传到CA服务器进行签名
]#/etc/pki/CA]#scp httpd.csr 192.168.32.111:/etc/pki/CA/]#openssl ca -in httpd.csr -out httpd.crt -days 360]#scp httpd.crt 192.168.32.9:/etc/httpd/conf.d/ssl/ <===传给服务器
5.安装加密模块mod_ssl
]#yum install -y mod_ssl]#rpm -ql mod_ssl/etc/httpd/conf.d/ssl.conf/usr/lib64/httpd/modules/mod_ssl.so/var/cache/mod_ssl/var/cache/mod_ssl/scache.dir/var/cache/mod_ssl/scache.pag/var/cache/mod_ssl/scache.sem
现在可以先访问看看,是不信任的。当然可以点继续浏览此网站。
650) this.width=650;" src="https://s2.51cto.com/wyfs02/M00/A6/6D/wKioL1nOULTTFTXMAABsak9Xx-g944.jpg-wh_500x0-wm_3-wmp_4-s_3211625287.jpg" title="1506693273(1).jpg" alt="wKioL1nOULTTFTXMAABsak9Xx-g944.jpg-wh_50" />650) this.width=650;" src="https://s1.51cto.com/wyfs02/M02/07/BB/wKiom1nOUWiyadGnAAAaHmHcNb4029.jpg" title="1506693354(1).jpg" alt="wKiom1nOUWiyadGnAAAaHmHcNb4029.jpg" />
6.配置mod_ssl配置文件
]#vim /etc/httpd/conf.d/ssl.conf SSLCertificateFile /etc/httpd/conf.d/ssl/httpd.crt <===证书路径 SSLCertificateChainFile /etc/httpd/conf.d/ssl/httpd.key <===密钥路径 SSLCACertificateFile /etc/httpd/conf.d/ssl/cacert.pem <===CA证书
7.重启服务,可以看到443端口打开了
]#service httpd reload]#ss -tanlLISTEN 0 128 :::80 :::* LISTEN 0 128 :::443 :::*
8.将根证书安装到受信任的根证书颁发机构中,再次打开该网站已经是受信任的HTTPS访问啦。
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M00/07/BB/wKiom1nOTqTTSKReAABIujOOYXk491.jpg-wh_500x0-wm_3-wmp_4-s_574981016.jpg" title="1506692611(1).jpg" alt="wKiom1nOTqTTSKReAABIujOOYXk491.jpg-wh_50" />
现在还有一个问题,我手动输入http://www.a.com还是继续能访问,而很多网站是手动输入www.a.com就可以直接跳转到加密网站的,而且网名们上网是不会去手动输入前缀的。
650) this.width=650;" src="https://s4.51cto.com/wyfs02/M01/A6/6D/wKioL1nOU3DiVTxEAAAg6yZYVCk388.png" title="微信截图_20170929220423.png" alt="wKioL1nOU3DiVTxEAAAg6yZYVCk388.png" />
上图两个地址是区分开来,可以通过HTTP重定向到HTTPS来完成自动跳转。
HTTP重定向;
]#vim /etc/httpd/conf.d/test.conf redirect temp / https://www.a.com/
测试]#curl http://www.a.com <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>302 Found</title></head><body><h1>Found</h1><p>The document has moved <a href="https://www.a.com/">here</a>.</p><hr><address>Apache Server at www.a.com Port 80</address></body></html>
在实际场景中,通过http跳转https是企业跳转是比较常见的,首先CLIENT发一个HTTP请求给SERVER,SERVER返回一个响应你要访问HTTPS,然后CLIENT再次发送HTTPS的请求,SERVER返回请求数据。这样的通讯进行了四次,比较浪费资源,给服务器带增加负担。于是就产生了HSTS,原理是服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。浏览器获取到该信息后,会将所有HTTP访问请求在内部做307跳转到HTTPS。而无需任何网络过程。
HTST实现:
]#vim /etc/httpd/conf/httpd.confHeader always set Strict-Transport-Security "max-age=15768000"RewriteEngine onRewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
HTTPS的实现
原文地址:http://maguofu.blog.51cto.com/12431016/1970045