打开任何网站,地址栏那把小锁就代表HTTPS,没锁的HTTP浏览器还会标不安全。但真问起来HTTPS到底多出了什么、那把锁锁的是什么、为什么不能被中间人窃听,能说全的不多。HTTPS的核心是TLS协议,在HTTP和TCP之间加了一层,做了加密、认证和完整性保护。把TLS握手流程和证书验证搞懂,你才算真理解HTTPS。
HTTP和HTTPS差在哪
HTTP是超文本传输协议,明文传输,数据在网络上裸奔,中间路由器、Wi-Fi热点、运营商都能看能改。这就是为什么早年登录网站用HTTP,密码能被嗅探,页面能被运营商插广告。HTTPS在HTTP下面加了TLS层,数据加密后再传,中间人看不到内容也改不了。
HTTPS多出来的不只是加密,还有身份认证和数据完整性。加密防窃听,认证防冒充,完整性防篡改。三者合起来才让HTTPS安全。少了认证,中间人可以冒充服务器;少了完整性,数据可能被悄悄改。
HTTPS默认端口443,HTTP是80。URL开头https比http多一个s,就是secure。
TLS握手四步
TLS握手是客户端和服务器协商出加密参数和密钥的过程,发生在TCP三次握手之后、HTTP数据传输之前。以TLS 1.2为例,握手分四步。
第一步ClientHello。客户端发消息给服务器,带着客户端支持的TLS版本、加密套件列表、压缩方法,还有一个客户端随机数。这一步告诉服务器我能用什么。
第二步ServerHello和证书。服务器回复选定的TLS版本、加密套件、服务器随机数,然后发服务器证书。证书里有服务器公钥、域名、有效期、签发机构。这一步告诉客户端我们用什么,并证明我是谁。
第三步密钥交换和验证。客户端验证证书合法后,生成一个预主密钥PreMaster Secret,用服务器公钥加密发给服务器。双方用客户端随机数、服务器随机数、预主密钥算出会话密钥。这一步双方协商出只有彼此知道的对称密钥。
第四步Finished。双方互发加密的Finished消息,握手完成。之后HTTP数据用协商的对称密钥加密传输。整个握手中非对称加密只用来交换对称密钥,因为非对称慢,不适合大数据。
TLS 1.3简化了握手,合并了几步,1-RTT就能完成,甚至0-RTT恢复会话,更快更安全。但核心思路一致:非对称换密钥,对称加密数据。
证书链验证
证书是身份凭证,由证书颁发机构CA签发。但客户端怎么信这个证书是真的?靠证书链。服务器证书由中间CA签,中间CA由根CA签,根CA是预装在操作系统或浏览器里的信任根。验证时从服务器证书开始,逐级向上验证签名,直到根CA,形成一条信任链。
验证检查几项:签名是否由上级CA正确签发、域名是否匹配、是否在有效期内、是否被吊销。任一不符就报错,浏览器显示证书错误。这就是为什么证书过期或域名不匹配时浏览器拦截。
根CA是信任的起点,预装在系统里。如果根CA作恶或被入侵,签出的证书都能被信任,整个体系崩塌。所以根CA的审核和管理极严,浏览器厂商会定期清理不合规的CA。
对称和非对称怎么配合
HTTPS同时用两种加密。非对称加密RSA或ECDHE,用于握手阶段交换对称密钥,因为非对称不需要预先共享密钥,适合初次通信。但非对称慢,比对称慢几个数量级,不适合大数据。
对称加密AES或ChaCha20,用于握手后的数据传输,快且安全。会话密钥只在一次会话有效,会话结束丢弃。这样既安全又高效,非对称解决密钥分发问题,对称解决性能问题。
前向保密是TLS 1.3的重要特性。用ECDHE做密钥交换,会话密钥不依赖服务器长期私钥,即使服务器私钥日后泄露,之前的会话也无法被解密。RSA密钥交换没有前向保密,私钥泄露历史会话全暴露,所以TLS 1.3废除了RSA密钥交换。
常见问题
【HTTPS能防所有攻击吗?】不能。HTTPS防的是传输层窃听篡改和身份冒充,不防应用层漏洞如SQL注入、XSS,也不防服务器被黑后的数据泄露。HTTPS是传输安全,不是应用安全,两者要分开。
【自签证书为什么浏览器报警?】自签证书没有受信任CA签发,证书链验证失败。技术上自签也能加密,但无法防中间人,因为任何人都能自签一个相同域名的证书冒充。所以浏览器要求证书必须由受信CA签发。
【TLS握手慢吗?】TLS 1.2握手要2-RTT,TLS 1.3只要1-RTT,0-RTT恢复更快。现代服务器有硬件加速和会话复用,握手开销通常几十毫秒,对用户体验影响小。HTTP/2和HTTP/3进一步优化连接复用。
【证书为什么有免费有收费?】技术上门槛一样,区别在保险、验证等级和服务。免费CA如Let's Encrypt签发域名验证DV证书,自动化。收费证书提供组织验证OV和扩展验证EV,验证更严,显示公司名,适合企业。功能上加密强度一样。