HTTPS 就是在 HTTP 外面套了一层加密通道(TLS),让你和网站之间传的数据,中间人看不懂、也改不了。你打开一个网站,地址栏左边有个小绿锁;换成 http:// 开头,浏览器却警告"不安全"——很多人知道 HTTPS 比 HTTP 安全,但说不清到底安全在哪。本文基于现行 TLS 1.2 / 1.3 协议梳理,覆盖"为什么需要、加密怎么工作、证书解决什么问题、握手怎么完成"四条主线。看完你不仅能解释小绿锁,还能在部署站点时少踩坑。今天这篇文章,编程狮就把这块讲透。
一、先给定义:HTTPS 就是加了 TLS 加密层的 HTTP
HTTP 是浏览器和网站之间"对话"的规则,它规定请求和响应长什么样。但它有个老问题:数据是按明文传的。你发的账号、密码、搜索词,在网上都是"裸奔"。
HTTPS 不是新协议,而是 HTTP + TLS(早期叫 SSL,现在主流是 TLS 1.2 和 TLS 1.3)。TLS 负责在正式传数据前,先帮你和网站协商出一把只有你们俩知道的"钥匙",之后的内容都用这把钥匙加密。想先把 HTTP 本身的请求响应模型搞清楚,可以看 HTTP 教程 的前几章。
1.1 那个小绿锁代表什么
小绿锁不是"网站可信"的保证,而是"当前连接已加密"的提示。它告诉你:你和目标服务器之间的这条路,第三方不容易偷听。至于对方是不是骗子,要靠下一节说的证书来判断。

从端口也能看出区别:HTTP 默认走 80 端口,HTTPS 走 443 端口。你在浏览器地址栏看到的 https:// 前缀,本质就是告诉浏览器"请用加密通道连这个站的 443 端口"。换句话说,HTTPS 解决的是"传输加密",证书解决的是"身份可信",两件事分开看才清楚。
二、为什么需要它:明文传输会被窃听、篡改、冒充
在没有加密的通道上,攻击者能做的事比你想象的多。主要有三类风险:
- 窃听:同一 WiFi 下,别人能抓到你发的明文,账号密码直接暴露;
- 篡改:中间人把网页里的下载链接换成带毒的,你毫无察觉;
- 冒充:攻击者伪造一个假网站,长得和真的像,骗你输入信息。
这三类风险,单靠"不给 WiFi 密码"是防不住的,必须在协议层加密。想理解这类系统级问题,软件工程教程 里关于网络与安全的章节会帮你建立更完整的视角。
这三类都属于经典的网络安全威胁:窃听破坏机密性,篡改破坏完整性,冒充破坏真实性。HTTPS 正是为同时应对这三者而设计的——它用一套机制,把"传出去的内容"保护在你和服务器之间那段路上。
2.1 不加密的真实代价
举个生活化的例子:明文传输像寄明信片,邮递员和你旁边的人都能读上面的字;加密传输像寄封信,只有收件人用钥匙拆开才看得到。涉及登录、支付、隐私表单时,必须用 HTTPS,这是底线。
三、加密与证书:对称加密、非对称加密,以及数字证书解决"你是谁"
加密本身有两套思路,HTTPS 把它们组合起来用。
3.1 对称加密:一把钥匙开一把锁
对称加密最简单:双方用同一把钥匙加密和解密,速度快。问题是——这把钥匙怎么安全地交给对方?如果明文发钥匙,被截获就全完了。
| 类型 | 特点 | 典型算法 |
|---|---|---|
| 对称加密 | 加解密同一把钥匙,快 | AES |
| 非对称加密 | 公钥加密、私钥解密,慢但能安全交换 | RSA、ECDHE |
3.2 非对称加密:先安全地把钥匙送过去
非对称加密有两把钥匙:公钥(公开)和私钥(保密)。别人用你的公钥加密,只有你的私钥能解开。HTTPS 握手时,就用非对称加密"安全地协商"出一把临时的对称钥匙,之后的大量数据再用那把对称钥匙高速传输。
3.3 数字证书:解决"你访问的到底是谁"
非对称加密能保护钥匙,但没法保证"公钥确实属于这个网站"。这时候需要数字证书:网站向可信的证书颁发机构(CA)申请,CA 核实身份后,把"网站域名 + 公钥"用 CA 自己的私钥签名。浏览器内置了受信任 CA 的列表,拿到证书后能验证签名,从而确认"这把公钥真的是这个网站的"。这里有一层"信任链":浏览器信任根 CA,根 CA 信任中间 CA,中间 CA 再给网站签发证书,于是你也间接信任了网站。任何一环断裂,浏览器就会警告。好在现在申请 HTTPS 证书大多免费(如 Let's Encrypt),个人站点也能轻松配上。更多网络基础概念,可以在 编程词典 里按词查。
💡 小提示:证书会过期。服务器上证书失效后,浏览器会报"您的连接不是私密连接"。运维同学部署站点时,记得定期检查有效期。
四、握手过程:一条安全连接怎么建立(四步简化版)
把前面串起来,一次 HTTPS 连接大致是这样建立的(以 TLS 1.3 简化描述):
- 客户端说"我想用 HTTPS 连你",并列出支持的加密套件;
- 服务器回送证书(含公钥),客户端验证证书真伪;
- 双方用非对称加密协商出一把临时的会话钥匙;
- 之后所有数据用这把会话钥匙对称加密传输。
为什么不全用非对称加密?因为它计算重、速度慢。HTTPS 的聪明之处在于:只用非对称加密完成"交换钥匙"这一步,之后海量数据都用轻快的对称加密,兼顾安全和性能。一次完整的 HTTPS 握手通常只要几十毫秒,用户几乎无感。
# 查看某个域名的证书有效期(需要本机已安装 openssl)
echo | openssl s_client -servername www.w3cschool.cn -connect www.w3cschool.cn:443 2>/dev/null \
| openssl x509 -noout -dates
上面这段命令连上服务器、取出证书,打印出证书的生效与过期时间。在 Linux 服务器上排查"证书过期"类问题时很常用。要把服务跑在 Linux 上,Linux 教程 能帮你把环境基础打牢。
4.1 网站没上 HTTPS,浏览器会怎么提示
如果一个站点仍在用纯 HTTP,主流浏览器会在地址栏标出"不安全";在需要填写密码或银行卡号的页面上,还会额外弹出警告,直接影响访客的信任度。对个人开发者来说,现在部署 HTTPS 的门槛已经很低:Let's Encrypt 提供免费证书,多数云厂商和主机面板支持一键申请与自动续期。这类免费证书有效期通常是 90 天,看起来很短,但续期由脚本自动完成,不需要人工盯着。所以"要不要上 HTTPS"在今天基本不再是成本问题,而是默认选项。
⚠️ 注意:TLS 版本有安全要求,TLS 1.0 / 1.1 已被淘汰,新项目应至少用 TLS 1.2,优先 1.3。用老版本会被现代浏览器降级提示。
总结
HTTPS 不是神秘黑盒:它就是"HTTP + TLS 加密层"。明文传输会被窃听、篡改、冒充,所以必须用加密;HTTPS 同时用对称加密(快)和非对称加密(安全地交换钥匙),再用数字证书确认"对方是谁",最后通过握手协商出会话钥匙开始加密传输。小绿锁代表"连接已加密",不是"网站一定可信"。
要点带走:
- HTTPS = HTTP + TLS,核心是多了一层加密;
- 对称加密快、非对称加密能安全交换钥匙,两者配合;
- 数字证书由 CA 签发,用来确认网站身份;
- 握手的目标是协商出一把临时会话钥匙。
把 HTTPS 当成上线的默认选项,而不是可选项——它早已是现代网站的及格线。下一步,动手给自己的站点配上 HTTPS(申请证书、配置服务器),把"不安全"提示彻底去掉。
延伸学习
想把 Web 安全基础系统补齐,可以按这个顺序来:
常见问题
Q:HTTPS 一定代表网站可信、不是钓鱼网站吗?
A:不一定。小绿锁只说明"连接已加密",不保证对方身份真实。钓鱼网站也能申请到合法证书。判断可信度还要看域名、内容和证书颁发者。
Q:有了 HTTPS,数据就绝对安全了吗?
A:HTTPS 防的是"传输途中被窃听、篡改",不防服务端本身被攻破、或你电脑中了木马。它是必要基础,不是万能保险。
Q:为什么有的网站强制跳转到 HTTPS?
A:因为 http 明文有风险。很多站点在服务器端配置"80 端口请求全重定向到 443",强制走加密通道,避免用户误用明文连接。

免费 AI IDE



