从http到https
前言
最近博客美化方面做的都差不多了,也没有太多东西好捣鼓了,这个时候我又注意到我的网站标头显示着一个不安全
的字样,觉得又好奇又奇怪,因为在这之前我已经给域名添加了ssl证书,按理说现在应该是以https协议访问,应该不会出现不安全
字样。
后来发现原因是,即使网站是通过https协议访问的,但如果网站页面内存在http链接,则依然会显示不安全
字样,这篇文章就https为中心来聊一聊。
什么是HTTP?HTTPS?
2017年1月发布的Chrome56浏览器开始把收集密码或信用卡数据的HTTP页面标记为“不安全”,若用户使用2017年10月推出的Chrome62,带有输入数据的HTTP页面和所有以无痕模式浏览的HTTP页面都会被标记为“不安全”,此外,苹果公司强制所有iOS App在2017年1月1日前使用HTTPS加密。
HTTP
超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
发展历史:
版本 | 产生时间 | 内容 | 发展现状 |
---|---|---|---|
HTTP/0.9 | 1991年 | 不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求 | 没有作为正式的标准 |
HTTP/1.0 | 1996年 | 传输内容格式不限制,增加PUT、PATCH、HEAD、 OPTIONS、DELETE命令 | 正式作为标准 |
HTTP/1.1 | 1997年 | 持久连接(长连接)、节约带宽、HOST域、管道机制、分块传输编码 | 2015年前使用最广泛 |
HTTP/2 | 2015年 | 多路复用、服务器推送、头信息压缩、二进制协议等 | 逐渐覆盖市场 |
http特点:
- 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作
- 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
- 基于请求和响应:基本的特性,由客户端发起请求,服务端响应
- 简单快速、灵活
- 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性
针对无状态的一些解决策略:
- 通过Cookie/Session技术
- HTTP/1.1持久连接(HTTP keep-alive)方法,只要任意一端没有明确提出断开连接,则保持TCP连接状态,在请求首部字段中的Connection: keep-alive即为表明使用了持久连接
HTTPS
《图解HTTP》这本书中曾提过HTTPS是身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
PS:TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不区分。
https特点:
基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护
- 内容加密:采用混合加密技术,中间者无法直接查看明文内容
- 验证身份:通过证书认证客户端访问的是自己的服务器
- 保护数据完整性:防止传输的内容被中间人冒充或者篡改
- 收方能够证实发送方的真实身份;
- 发送方事后不能否认所发送过的报文;
- 收方或非法者不能伪造、篡改报文。
https缺点:
- HTTPS 协议握手阶段比较费时,会使页面的加载时间延长近。
- HTTPS 连接缓存不如 HTTP 高效,会增加数据开销,甚至已有的安全措施也会因此而受到影响。
- HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用。
- SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗。
- 成本增加。部署 HTTPS 后,因为 HTTPS 协议的工作要增加额外的计算资源消耗,例如 SSL 协议加密算法和 SSL 交互次数将占用一定的计算资源和服务器成本。
- HTTPS 协议的加密范围也比较有限。最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。
更多请参考:
申请二级域名
如果想要通过域名来访问服务器上的文件,申请二级域名是一个不错的方案,如果你的域名是在阿里云上申请的,二级域名的申请可以如下操作:
首先登录阿里云,进入控制台,找到你的域名列表,在你的域名右侧有这几个功能
点进去解析,添加记录
因为我在这里是想申请一个二级域名来访问服务器上的文件,则记录值为我的服务器公网IP,主机记录自由编辑,选择记录类型为A
填写完点击确认,即可成功申请二级域名download.chenxuefan.cn
申请ssl证书,部署到网站
在阿里云控制台搜索ssl证书,进入ssl证书管理控制台
点击购买证书,可以选择免费的(当然要选择免费的
购买之后需要过一小会的时间才能签发,签发之后在证书的右侧选择部署CDN,再选择部署自己的域名即可
证书部署到域名了还没有完,还要在服务器进行web服务的部署
Nginx部署
在上一步下载你的证书,下载时类型选择其他,下完之后有两个文件
登录到服务器,打开nginx.conf
文件所在的路径,新建cert
文件夹,赋予权限,把这两个文件上传到cert
文件夹下
sudo mkdir cert && chmod -R 777 cert
执行命令sudo vim nginx.conf
编辑文件如下:
编辑完毕,保存,检验下文件有无出错(一般会发现少写了一个 { 的错误
nginx -t
重启nginx
nginx -s reload
重启nginx服务
service nginx restart
接着就可以通过download.chenxuefan.cn
访问了
这时网站输入栏左侧出现了一个🔒,说明此链接经过加密,是一个https链接
工作完成,撒花🎉
后记
推荐阅读 - HTTP和HTTPS协议,看一篇就够了