当我们打开浏览器的时候,发现许多网站走的协议都变成了https,我们知道http协议是不加密的,数据在互联网上流通是不安全的,https协议就是加密的,所以现在一些大型电商网站都使用https协议,为的就是保护客户的数据和个人信息,甚至现在浏览器都会直接帮你从http协议跳转到https协议。

https跳转方法简介:

先介绍一下HSTS:HTTP Strict Transport Security

需要浏览器支持 第一次走http 之后都走https服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。浏览器获取到该信息后,会将所有HTTP访问请求在内部

307跳转到HTTPS。而无需任何网络过程(现在的浏览器一般都支持HSTS

简单的说就是:服务器经过第一次http连接后告诉客户端我有hsts服务,然后客户端下次访问内部自动跳转到https协议。

HSTS preload list 域加载列表

这个就是网站和浏览器直接的合作,网站和浏览器商量好,当访问我这个网站时,浏览器你自动跳转到https协议上去,并生成一个名单列表上传到互联网上去,浏览器会自动在互联网中获取这个域加载列表 假如,是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPSFirefoxSafariEdge浏览器也会采用这个列表

实现HSTS示例:

    vim /etc/httpd/conf/httpd.conf

    Header always set Strict-Transport-Security "maxage=15768000"

    RewriteEngine on

    RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]


实验过程:

SSL会话的简化过程

(1) 客户端发送可供选择的加密方式,并向服务器请求证书

(2) 服务器端发送证书以及选定的加密方式给客户端

(3) 客户端取得证书并进行证书验证

如果信任给其发证书的CA

(a) 验证证书来源的合法性;用CA的公钥解密证书上数字签名

(b) 验证证书的内容的合法性:完整性验证

(c) 检查证书的有效期限

(d) 检查证书是否被吊销

(e) 证书中拥有者的名字,与访问的目标主机要一致

(4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换

(5) 服务用此密钥加密用户请求的资源,响应给客户端

基于linux实现http服务跳转https_基于

前提是客户端信任CA机构并且拥有CA机构的公钥

1-->客户端向https机器发送请求

2-->https向CA机构请求证书,申请包括https机器的公钥

3-->CA机构用自己的私钥完成签名反还给https机器。

4-->把或得的证书(包含https机器被CA机构私钥签过名的公钥)发给客户端,用CA机构的公钥解开就可以得到https机器的公钥

然后客户端自己生成一个会话秘钥session key,用来以后实现对称加密,用https机器的公钥加密发给https机器,https机器用私钥解开,获得会话秘钥,这样就实现了身份验证,进而进行数据通讯。


准备3台虚拟机:CA 服务器 客户端

CA机上:完成CA自签

服务器上:生成CA请求,发送到CA完成认证。

客户端:

证书的颁发过程可以查看下面这篇博客:

http://13287454.blog.51cto.com/13277454/1968050


方法一:客户端通过命令自生成自签证书:Yum install mod_ssl


基于linux实现http服务跳转https_实现_02

通过装包的运行脚本,已经生成了私钥和证书文件

基于linux实现http服务跳转https_基于_03 /etc/httpd/conf.d/ssl.conf查看配置文件:Vim /etc/httpd/conf.d/ssl.conf

基于linux实现http服务跳转https_linux_04

其实这是重启http服务就可以实现https的访问了

基于linux实现http服务跳转https_linux_05基于linux实现http服务跳转https_实现_06

用Windows浏览器访问:

基于linux实现http服务跳转https_基于_07

因为我们的证书时自签证书,浏览器并不信任,所以会出现证书问题安全警报,继续浏览此网站就可以访问了!


方法二:

过程和方法一类似,只不过证书和私钥的生成是由另外两个虚拟机模拟实现的,具体可以参考上面的CA自签以及证书发放的博客链接。完成后把私钥和证书文件使用scp命令发送到客户端

基于linux实现http服务跳转https_基于_08修改配置文件 /etc/httpd/conf.d/ssl.conf里私钥和证书对应的路径

基于linux实现http服务跳转https_linux_09

然后重启服务就行!


方法三:Http重定向https

修改子配置文件     vim /etc/httpd/conf.d/test.conf 

添加一行:Redirect temp / https://www.magedu.com/

修改/etc/hosts文件充当DNS解析

基于linux实现http服务跳转https_基于_10

访问测试:

基于linux实现http服务跳转https_基于_11


最后补充一下:

http协议常见的返回状态码

200: 成功,请求数据通过响应报文的entity-body部分发送;OK

301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently

302: 响应报文Location指明资源临时新位置 Moved Temporarily

304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified

401: 需要输入账号和密码认证方能访问资源;Unauthorized

403: 请求被禁止;Forbidden

404: 服务器无法找到客户端请求的资源;Not Found

500: 服务器内部错误;Internal Server Error

502: 代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gateway

503 – 服务不可用,临时服务器维护或过载,服务器无法处理请求

504 – 网关超时


1xx:100-101 信息提示

v 2xx200-206 成功

v 3xx300-305 重定向

v 4xx400-415 错误类信息,客户端错误

v 5xx500-505 错误类信息,服务器端错误