Mintimate's Blog,只为与你分享
使用浏览器打开网站,你会发现网址边上,有时候会有一个锁的标志:
看上去,似乎是提醒你,某些东西已经被加密。其实,就是代表网站使用的是HTTPS协议,也就是:超文本传输安全协议(英语:HyperText Transfer Protocol Secure ,缩写:HTTPS;常称为HTTP Secure)。
HTTP协议最初设计于1990年代初,互联网尚处于相对初级的发展阶段,主要关注的是如何有效地链接文档和资源,网络环境相对封闭且信任度较高,对数据安全和隐私保护的需求并不像今天这样迫切。
随着时代演进,信息传输安全日益受到重视,为了防范数据在传输过程中被非法监听或泄露,HTTPS应运而生。
HTTPS通过在HTTP协议基础上集成SSL/TLS加密技术,为数据包披上了一层安全外衣,有效增强了网络通信的安全性和隐私保护,从而适应了互联网发展中对于安全需求的提升。
所以? HTTPS相比HTTP,具体有什么区别呢?为什么现在的网站会需要HTTPS呢?
HTTP版本
首先,经常有人把HTTPS和HTTP的版本弄混。其实这两个有关系,但是关联不大:
- HTTP版本: 指的是协议的基础规范和功能特性,定义了客户端与服务器之间数据传输的规则。每个版本的HTTP(如HTTP/1.0、HTTP/1.1、HTTP/2)都在前一版本的基础上进行了改进,比如: HTTP/1.1 (1997年发布)在HTTP/1.0基础上引入了持久连接、增加了PUT、DELETE等请求方法等;HTTP/2(2015年发布)又进一步支持多路复用,一个 TCP 连接上可并行处理多个请求。
- HTTPS: 则是HTTP协议的安全版本,通过在HTTP协议之上添加一个安全层(通常是TLS/SSL协议),实现了数据的加密传输,保障了通信的安全性。这个安全层的工作原理与HTTP的版本无关,它可以应用于任何版本的HTTP协议上。
其实,HTTPS的发展也挺有趣的:最早的HTTPS在1994年由Netscape(没错,就是著名的「网景」公司;被IE打败...... 没想到,现在IE也无了~)开发,用于提供网络浏览器和网站服务器之间的安全通信。
后来在1996年,HTTPS被正式纳入HTTP/1.1规范中。随着互联网的快速发展,HTTPS逐步得到广泛应用,成为保护网络通信的主要手段之一,也逐渐从之前的付费项目,到如今Let's Encrypt等免费SSL/TLS证书的出现。
SEO
为什么,我们现在需要使用HTTPS呢?现在很多搜索引擎,已经把HTTPS纳入为SEO评分内:
其实,目前HTTPS对SEO的权重还是有较大的影响。也就是,如果不使用HTTPS...... 本就"人迹罕至"的网站,可能更加"荒僻"了。
另外,还有3个主要原因:
- 浏览器兼容
- 数据防监听
- 数据完整性验证
浏览器兼容性
从 2018 年 7 月发布的 Chrome 68 开始,所有不安全的 HTTP 流量在 URL 栏中都会标记为"不安全"。对于没有有效 SSL 证书的网站,也都会显示此通知。其他浏览器也纷纷效仿。
甚至,我们之前会使用Nginx的配置:
json
server {
listen 80;
server_name your_domain.com;
# 80 重定向到 443,进而实现 HTTP -> HTTPS
if ($server_port !~ 443) {
rewrite ^(/.*)$ https://$host$1 permanent;
}
}
这是因为,我们输入的网址,默认浏览器会认为是HTTP普通协议,会直接使用http://
进行请求,而我们希望用户尽可能使用我们设置的https://
,就会进行这样的操作。
但是,Chrome 从90版本开始,就已经是默认请求HTTPS,日后说不定都不需要Nginx上进行这样的处理啦:
虽然HTTPS,因为需要使用证书对内容加密,对传输的速度有一定的影响;但是Chrome和Chromium已经默认请求HTTPS了,一定程度上,就默认请求速度而言HTTPS和HTTP的速度相差更少了。
数据防监听
我们知道HTTPS是有使用非对称加密的,也就是客户端使用的公钥,和服务器端的私钥是不一样的:
这样有什么好处呢? 很简单,如果有人在中间截获了数据报文,那么正常情况下,也是没有用的(没有私钥对其解密)。
当然,也需要小心"中间人攻击"就是了:
其实,一些抓包工具,就是使用这个原理,劫持请求,使用抓包工具的证书替代服务器下发的证书,进而解析内容 。不过"中间人"攻击、抓包工具,通常需要用户手动确认在设备安装客户端证书,否则浏览器等设备也会拒绝非公信机构的证书。
数据完整性校验
HTTPS使用数字签名和消息认证码 (Message Authentication Code) 来确保数据完整性。其实和"数据防监听"类似,本质就是把数据进行Hash处理后,生成一组哈希值,用于校验收到的信息,经过哈希处理后,能否得到相同的信息。
再详细一下:
- 握手阶段:在HTTPS建立连接的握手阶段,客户端和服务器会协商使用的加密算法和密钥。密钥协商可以使用公钥加密算法(如RSA)或者椭圆曲线加密算法(如ECDSA)来实现。
- 密钥生成:一旦协商完成,客户端和服务器将生成一个共享的对称密钥,该密钥将用于后续的通信加密和消息认证码计算。
- 数据加密和认证:在HTTPS通信过程中,传输的数据会使用对称密钥进行加密和解密。同时,为了验证数据的完整性,每个数据包还会计算消息认证码。
- 数据加密:发送方使用对称密钥对要发送的数据进行加密,确保数据在传输过程中不被窃听者获取。
- 消息认证码计算:发送方使用密钥和加密算法(如HMAC-SHA256)对加密后的数据进行处理,生成一个固定长度的消息认证码。
- 认证码验证:接收方收到加密的数据和消息认证码后,会使用相同的密钥和加密算法进行计算。然后与接收到的消息认证码进行比较。如果计算得到的认证码与接收到的认证码一致,说明数据完整无误;如果不一致,则说明数据可能已经被篡改或损坏。
是不是有小伙伴好奇,不是说HTTPS是非对称加密么? 为什么这里又出现了对称加密?
要知道,非对称加密,对算力和性能是有需求的。使用4096位密钥对内容进行加密,HTML的内容又复杂,如果全程使用非对称加密,有点过于奢侈。所以,通常情况,HTTPS 中内容传输加密采取的是对称加密,而不是非对称加密。
SSL发展
综上所述,现代的网站,无论是出于用户数据安全,还是传输的稳定性上,亦或者是网站的搜索引擎的收录上,HTTPS都是越来越重要的。
而实现HTTPS,就需要在网站上部署SSL密钥对,如何申请密钥证书呢?毕竟,自己使用OpenSSL的自签证书,不是公认权威机构部署签名的,无法被浏览器信任。
其实SSL的发展,也是挺有趣的。早期阶段(大概90年代中期) ,SSL 证书只能由少数几家权威 CA 机构申请,费用较高 ,普及程度较低,这个时候一般只有银行等一些对安全有较高要求的企业会部署SSL;到2015年 ,开源项目 Let's Encrypt 诞生,提供免费的 SSL/TLS 证书 ,推动了 HTTPS 的普及和应用,降低了网站管理员的成本,中小企业和个人也可以使用SSL证书。
而到了现在,出现了越来越多的自动化 SSL/TLS 证书申请和更新工具 ,如 acme.sh。大型云服务提供商也开始提供免费的 SSL/TLS 证书服务,如 AWS、腾讯云等。甚至,你如果使用Cloudflare,直接全站二级域名SSL化。
不得不说,时代在进步。
改天,我们就来说说,如何使用acme.sh自动签署SSL并自动续签域名。一劳永逸~
参考内容: