博客:https://www.mintimate.cn Mintimate’s Blog,只为与你分享
使用浏览器打开网站,你会发现网址边上,有时候会有一个锁的标志:
看上去,似乎是提醒你,某些东西已经被加密。其实,就是代表网站使用的是HTTPS协议,也就是:超文本传输安全协议(英语:HyperText Transfer Protocol Secure,缩写:HTTPS;常称为HTTP Secure)。
HTTP协议最初设计于1990年代初,互联网尚处于相对初级的发展阶段,主要关注的是如何有效地链接文档和资源,网络环境相对封闭且信任度较高,对数据安全和隐私保护的需求并不像今天这样迫切。
随着时代演进,信息传输安全日益受到重视,为了防范数据在传输过程中被非法监听或泄露,HTTPS应运而生。
HTTPS通过在HTTP协议基础上集成SSL/TLS加密技术,为数据包披上了一层安全外衣,有效增强了网络通信的安全性和隐私保护,从而适应了互联网发展中对于安全需求的提升。
所以? HTTPS相比HTTP,具体有什么区别呢?为什么现在的网站会需要HTTPS呢?
首先,经常有人把HTTPS和HTTP的版本弄混。其实这两个有关系,但是关联不大:
其实,HTTPS的发展也挺有趣的:最早的HTTPS在1994年由Netscape(没错,就是著名的「网景」公司;被IE打败…… 没想到,现在IE也无了~)开发,用于提供网络浏览器和网站服务器之间的安全通信。
后来在1996年,HTTPS被正式纳入HTTP/1.1规范中。随着互联网的快速发展,HTTPS逐步得到广泛应用,成为保护网络通信的主要手段之一,也逐渐从之前的付费项目,到如今Let's Encrypt等免费SSL/TLS证书的出现。
为什么,我们现在需要使用HTTPS呢?现在很多搜索引擎,已经把HTTPS纳入为SEO评分内:
其实,目前HTTPS对SEO的权重还是有较大的影响。也就是,如果不使用HTTPS…… 本就“人迹罕至”的网站,可能更加“荒僻”了。
另外,还有3个主要原因:
从 2018 年 7 月发布的 Chrome 68 开始,所有不安全的 HTTP 流量在 URL 栏中都会标记为“不安全”。对于没有有效 SSL 证书的网站,也都会显示此通知。其他浏览器也纷纷效仿。
甚至,我们之前会使用Nginx的配置:
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是非对称加密么? 为什么这里又出现了对称加密?
要知道,非对称加密,对算力和性能是有需求的。使用4096位密钥对内容进行加密,HTML的内容又复杂,如果全程使用非对称加密,有点过于奢侈。所以,通常情况,HTTPS 中内容传输加密采取的是对称加密,而不是非对称加密。
综上所述,现代的网站,无论是出于用户数据安全,还是传输的稳定性上,亦或者是网站的搜索引擎的收录上,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并自动续签域名。一劳永逸~
参考内容:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。