常见问题 作者:jTrust 2026-10-16 03:56:21 阅读:0
很多刚接触 SSL/HTTPS 的站长会产生疑问: SSL 证书里面本身就携带网站的公钥,公钥是公开的,所有人都能拿到。那 HTTPS 传输网页、表单数据的时候,为什么不直接拿服务器公钥把业务数据全部加密?为什么还要搞复杂的 TLS 握手、协商会话密钥?
简单结论:不是技术做不到,是非对称(公钥)加密本身速度慢、有长度限制,完全不适合加密大量网页业务数据。公钥只用来做密钥交换与身份认证,真正加密网页流量靠对称加密。
非对称加密(公钥、私钥,证书里的这套)公钥公开,私钥服务器保存。公钥加密的内容,只能私钥解开。
优点:可以安全交换秘密,不需要提前约定密码;可以验证书站身份(SSL 证书)
致命缺点:运算极慢,加密的数据长度有严格上限,不适合大流量
对称加密(AES 等会话密钥)加密、解密使用同一个密钥。
优点:速度飞快,适合网页、图片、接口这种大批量数据加密;
缺点:双方要拿到同一个密钥,怎么安全把密钥给到浏览器是难题。
HTTPS 的设计思路:用非对称加密解决「安全传递对称密钥」的问题;后续全部业务流量,用高速的对称密钥加密传输。
1. 非对称加密有明文长度上限,不能加密大块数据
RSA 最常用的 2048 位公钥,最多只能加密大约 245 字节的数据。 网页 HTML、图片、接口返回经常几 KB、几十 KB 甚至更大。
一段超过长度的数据,RSA 公钥根本无法直接加密。网页随便一段 HTML 就几百上千字节,直接加密会直接报错。
补充:并不是不能加密大文件,行业做法是 “分段”,但分段 RSA 性能会惨不忍睹。
2. 公钥加密性能极差,服务器扛不住访问压力
RSA 非对称加密属于大数字模幂运算,CPU 开销巨大。 假设网站 1000 人同时访问,如果每一次 HTTP 返回的网页、图片全部用 RSA 公钥加密:服务器 CPU 会瞬间打满,网站直接卡顿、宕机。
对称 AES 加密性能比 RSA 高出上千倍,适合互联网高并发场景。
3. 无法做会话复用,每次请求重复加密,资源严重浪费
同一个用户打开网站会多次请求页面、图片、接口。 如果每次数据包全部公钥加密,每一次请求都执行高消耗非对称运算。 真实 TLS:握手协商一次会话密钥,整个会话期间反复复用这个对称密钥,握手一次,多次传输。
4. 会带来安全隐患:无法使用高效加密套件(AES‑GCM 等)
现代 TLS 支持 AEAD 认证加密,既有加密又带完整性校验,防篡改。这套能力都是对称密码体系提供。单纯 RSA 加密只能做到加密,原生不提供防篡改能力。
浏览器连接服务器,服务器下发 SSL 证书(证书携带服务器公钥,iTrustSSL 等 CA 签名,证明公钥确实属于这个网站)
浏览器生成一个随机的预主密钥(临时秘密),使用服务器公钥加密这个小的随机密钥,发给服务端
服务器用自己私钥解密,拿到这个预主密钥
浏览器、服务器两边,共同推导出一套会话对称密钥(AES 密钥)
之后所有网页、表单、接口业务数据,全部使用这套 AES 对称密钥加密传输
关键点:公钥只加密 “一小段随机密钥”,不是加密网页内容。业务数据流交给速度飞快的对称加密。
早期 TLS 使用 RSA 密钥交换:浏览器把预主密钥用服务器公钥加密传给服务端。 但它有一个问题:如果服务器私钥泄露,抓取到的全部历史加密流量都可以被解密。
所以现代 HTTPS 大量使用 ECDHE(椭圆曲线密钥协商): 不再直接加密预主密钥,双方交换临时公钥共同算出会话密钥。就算服务器长期私钥泄露,过去的历史通信也无法解密,具备前向安全。
证书的公钥 / 私钥,此时只用来做身份签名认证,不再加密会话消息。
Q:既然公钥不能加密大数据,那公钥主要用来干什么?
A:两件核心工作
身份验签:CA 对证书签名,浏览器验证证书签名,确认你正在访问的是真实网站,防止钓鱼劫持。
密钥协商:安全交换会话密钥,把对称密钥安全给到通信双方。
Q:SSL 证书的公钥从来不加密网页吗?
A:是的。业务载荷(HTML、JSON、图片)一律是对称加密。RSA 公钥仅参与握手阶段密钥交换 / 签名。
Q:那我能不能自己写代码,用公钥加密 POST 提交的表单?
A:可以做小数据加密。但这只是业务层加密,不等于 HTTPS。你要自己处理证书校验、防中间人攻击,不建议替代 TLS。
公钥(非对称加密):像一把挂号锁,适合安全传递一把 “房间钥匙”,但是拿这把锁去锁一整车货物效率极低,还受大小限制。 对称会话密钥:就是这把房间钥匙,锁、开箱速度极快,整车货物全部用它来保护。
HTTPS 就是:用证书公钥安全把房间钥匙交给双方,后续所有数据都用这个钥匙加密传输。