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.重启服务,本机测试
搭建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.zones zone "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 dns1 dns1 IN A 92.168.32.111 websrv IN A 192.168.32.9 www IN CNAME websrv 注意权限 ]#chown named:named a.com.zone
6.重启服务后 本机测试,修改本机DNS指向搭建的DNS地址
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 = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = 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
现在可以先访问看看,是不信任的。当然可以点继续浏览此网站。
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 -tanl LISTEN 0 128 :::80 :::* LISTEN 0 128 :::443 :::*
8.将根证书安装到受信任的根证书颁发机构中,再次打开该网站已经是受信任的HTTPS访问啦。
现在还有一个问题,我手动输入http://www.a.com还是继续能访问,而很多网站是手动输入www.a.com就可以直接跳转到加密网站的,而且网名们上网是不会去手动输入前缀的。
上图两个地址是区分开来,可以通过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.conf Header always set Strict-Transport-Security "max-age=15768000" RewriteEngine on RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
原文地址:http://maguofu.blog.51cto.com/12431016/1970045