原生 HTTP 本身明文传输,无加密、无身份校验、无完整性保护,并不安全。HTTP 实现安全传输,核心方案是HTTPS(HTTP over TLS/SSL),即在 HTTP 下层叠加 TLS 安全层。
一、HTTPS 整体原理
HTTPS = HTTP + TLS(传输层安全协议,旧版叫 SSL)
HTTP 应用层报文不再直接交给 TCP;
HTTP 报文先交给TLS 层做加密、签名;
加密后的二进制数据再通过 TCP 传输;
接收端 TLS 解密,还原原始 HTTP 报文交给应用层。
TLS 主要解决三大安全问题
加密(防窃听):传输内容密文,中间人无法读取原始数据
身份认证(防钓鱼 / 伪装服务器):证书验证服务器身份(可选客户端证书做双向认证)
完整性校验(防篡改):消息摘要,报文被中间人修改后校验失败
二、TLS 握手流程(简化版,TLS1.2)
客户端 Hello:客户端发给服务端,支持的 TLS 版本、加密套件、随机数
服务端 Hello:服务端选定 TLS 版本、加密套件,返回服务端随机数 + 服务器数字证书
证书校验:客户端验证证书:证书是否由可信 CA 签发、域名匹配、有效期合法、证书签名是否有效。证书内含服务器公钥
密钥协商
客户端生成预主密钥,用服务器公钥加密发给服务端;
服务端用自己私钥解密拿到预主密钥;
双方用客户端随机数、服务端随机数、预主密钥,各自生成会话对称密钥。
切换加密模式:双方告知对方,后续通信全部使用协商好的对称密钥加密传输
握手完成:握手结束,开始传输加密 HTTP 请求 / 响应
TLS1.3 大幅简化握手:多数场景1-RTT,减少握手往返,性能更好。
两种密钥
非对称密钥(RSA/ECC):只用于握手阶段,身份认证 + 协商对称密钥;计算慢,不用于业务数据加密
对称密钥(AES 等):握手成功后,真正加密 HTTP 报文;速度快,适合大量数据传输
三、证书体系
数字证书由 CA(证书颁发机构)签发,包含:
服务器域名、服务器公钥、CA 签名、有效期 浏览器 / 操作系统内置可信 CA 根证书列表,用来校验服务端证书合法性。
双向 HTTPS 认证:除了服务器证书,客户端也要持有客户端证书,服务端校验客户端身份,常用于内网、API 网关。
四、除 HTTPS 外的 HTTP 安全增强手段
HTTPS 是传输层安全,下面是应用层配套安全措施:
HSTS:响应头
Strict-Transport-Security,强制浏览器必须使用 HTTPS 访问,禁止降级 HTTP,防止 HTTP 劫持CSP:内容安全策略,防止 XSS 注入攻击
Secure & HttpOnly Cookie:Cookie 标记 Secure,仅 HTTPS 下传输;HttpOnly 禁止 JS 读取 Cookie,防 Cookie 窃取
证书固定(HPKP,现已废弃):曾经用来绑定证书公钥,防止 CA 被劫持
HTTP 认证:Basic Auth、Digest Auth(注意:Basic Auth 即使 HTTPS 下,账号密码只是 base64 编码,不是加密)
API 签名:请求参数 + 时间戳做哈希签名(如 HMAC),应用层防篡改、防重放攻击,常用于开放接口
五、常见误区
❌ HTTPS 能保证业务逻辑安全:HTTPS 只保证传输链路安全,不能防止服务端代码漏洞(SQL 注入、业务越权)
❌ HTTPS 加密后完全看不到内容:服务端可以解密看到完整 HTTP 报文;抓包工具安装根证书后也可解密调试
❌ 有证书就一定安全:证书过期、域名不匹配、使用弱加密套件,依然存在风险
六、总结
原生 HTTP 无法安全传输,HTTPS (TLS) 是 HTTP 安全传输的标准方案: 在 TCP 与 HTTP 中间插入 TLS 层,通过非对称密码完成身份认证与会话密钥协商,再用对称加密对 HTTP 报文加密传输,实现防窃听、防篡改、防中间人劫持;再配合 HSTS、Cookie 安全标记等 HTTP 头,进一步加固。