HTTPS的实现
1、http想实现为https 就需要为配置ssl,及其使用的证书。这些在http里有专门的mod_ssl模块来支持。
yum -y install mod_ssl #安装mod_ssl模块
安装该模块后,它会自动修改配置文件,增加LoadModule ssl_module modules/mod_ssl.so在httpd的子配置文件/etc/httpd/conf.d/ssl.conf里,同时也打开了443端口,同时指定了证书的存放路径。
原因是安装的时候,安装包里会有脚本去生成私钥文件/etc/pki/tls/private/localhost.key,同时也生成证书文件/etc/pki/tls/certs/localhost.crt,而这个证书文件是自签名的,此时https网站已经可以访问,但是由于这个https服务器的证书有问题,颁发给的机构不对,不是对应的站点名称。所以需要要重新向CA申请,在获取CA颁发的证书后才能正确使用https站点。
2、申请证书
首先需要实现HTTPS就必须要购买SSL证书,申请网址 https://cloud.lyzmz.com
证书签发完成后,会得到证书包请根据网站环境选择下载
3、修改配置文件:/etc/httpd/conf.d/ssl.conf 需要修改的就是下面这几项
DocumentRoot /var/www/html #指明共享文件的根目录,这个目录会覆盖/etc/httpd/conf/http.conf里的设置
ServerName www.Webname.com #指明这个Web网站服务器的名字
SSLCertificateFile /etc/httpd/ssl/httpd.crt #指明证书存放的位置
SSLCertificateKey /etc/httpd/ssl/httpd.key #指明私钥文件的存放位置
SSLCACertificateFile /etc/httpd/ssl/cacert.pem #指明根证书的存放位置
4、重新加载配置
service httpd reload #重载配置文件
5、测试是否配置成功
测试命令:
openssl s_client [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]
例:openssl s_client -connect HostIP:443 #如果出现证书文件内容,则说明https已经搭建成功
这里的HostIP也可以写成你的服务器域名,前提是你的域名已经在DNS服务器上做过域名解析了。
6、http重定向到https
重定向就是将http 请求转发至https 的URL。一般用户在向Web服务器请求文件时不会专门记这个网站是否为加密网站。所以就需要在服务端自动的将用户的http请求转换为https请求。
这里建议将http和https的主站点设置为同一个站点。因为跳转会将设置目录下的所有http请求进行跳转,如果https没有http站点的目录,比如http默认主站点是/var/www/html/,但是https下的主站点是/var/www/https,而且没有/var/www/https/web这个站点,当有请求去请求这个/var/www/https/web页面时,则跳转会显示网页不存在而导致网页打不开。
重定向:
(1)基于redirect进行跳转
基于redirect的跳转需要服务器内配置跳转文件,并指明跳转的路径。
redirect的语法格式:
redirect [status] URL-path URL
status 的两个状态:
Permanent:Returns a permanent redirect status(301) indicating that the resource has moved permanently(永久跳转)
Temp:Returns a temporary redirect status (302).This is the default(临时跳转)
例:vim /etc/httpd/conf.d/redirect.conf
redirect Permanent /var/www/html https://www.Webname.com #添加一条跳转路径,指明跳转后的根目录
(2)基于HSTS跳转
目前主流都是采用HSTS(HTTP StrictTransport Security)技术进行跳转。服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。浏览器获取到该信息后,会将所有HTTP访问请求在内部做重写307 跳转到HTTPS。而无需任何网络过程。当客户端第一次发http请求过来,服务器端响应https的结果给客户端,客户端会把这个响应缓存下来,下次客户端浏览器再次访问的时候,在浏览器端自动会将http转换为https,然后以https发请求给服务器。HSTS可以很大程度上解决SSL剥离攻击,因为只要浏览器曾经与服务器创建过一次安全连接,之后浏览器会强制使用HTTPS,即使链接被换成了HTTP。
HSTS preload list
HSTS preload list是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换为HTTPS。Firefox、Safari、Edge浏览器也会采用这个列表。这个是在浏览器内配置的,所以是要网站向各浏览器服务商申请,浏览器才会支持的。
配置HSTS转发:
vim /etc/httpd/conf/httpd.conf
Header always set Strict-Transport-Security "max-age=63072000" #告诉浏览器下次需要用https进行访问,这个信息的失效时间为两年
RewriteEngine on #打开重写引擎
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301] #定义重写规则
最后,修改完成后不要忘了重新加载配置。