HTTPS到底是怎么保证数据安全的?

技术焕焕 阅读 100

最近在做登录功能,发现本地开发用的是HTTP,但上线后必须用HTTPS。我大概知道HTTPS是加密的,但具体怎么加密、什么时候加密、证书又起什么作用,完全搞不清楚。

比如我发个请求:fetch('/api/login', { method: 'POST' }),这个过程在HTTPS下到底和HTTP有啥区别?是不是浏览器自动就加密了?那中间人还能不能看到我的密码?

我试过用Charles抓包,发现HTTPS请求的内容直接显示“SSL Proxying not enabled”,根本看不到明文,但HTTP就能看到。这说明加密是在传输层做的?可我又听说有对称和非对称加密,到底哪个阶段用哪种?

我来解答 赞 12 收藏
二维码
手机扫码查看
2 条解答
司空淑瑶
HTTPS通过SSL/TLS协议加密数据,浏览器和服务器之间先用非对称加密交换一个对称密钥,然后所有数据都用这个对称密钥加密传输,证书用于验证服务器身份。所以你用Charles抓包看不到明文是因为数据已经加密了。
点赞
2026-03-24 08:07
小竞一
小竞一 Lv1
HTTPS保证数据安全的核心原理其实没那么神秘,我给你捋一捋。

首先,HTTPS和HTTP的区别就在于TCP和TCP之间多了一层SSL/TLS协议,你可以理解为HTTPS = HTTP + SSL/TLS。浏览器和服务器握手成功后,所有的请求响应都会经过这层加密。

至于你问的对称和非对称加密,简单说就是这样:非对称加密用来做“身份验证”和“密钥交换”,对称加密用来做实际的数据加密。

具体流程是这样的:

浏览器发起请求时,服务器会先把自己的证书发过来。证书里面包含了服务器的公钥和一些身份信息,浏览器内置的CA根证书会验证这个证书是否可信。如果证书没问题,浏览器就生成一个随机数作为对称密钥,用证书里的公钥加密后发给服务器。服务器用私钥解密,得到对称密钥。从这一刻开始,双方都用这个对称密钥来加解密数据。

所以你发的fetch请求,数据在浏览器端就被对称加密了,然后经过SSL层传输,到服务器再解密。整个过程中间人确实看不到明文。

Charles抓不到HTTPS内容不是因为它在传输层还是应用层加密的问题,而是因为HTTPS的加密发生在TCP层和网络层之间,Charles想看内容必须先让浏览器信任它的证书,开启SSL Proxying其实就是做中间人攻击,浏览器以为Charles是服务器,Charles以为浏览器是客户端,两边都建立加密连接,它在中间解密再重新加密。

至于中间人能不能看到密码,理论上如果有人能同时截获你的流量并且让浏览器信任了他的证书,那确实能看到。但正常情况下不可能,因为CA证书没那么容易伪造,而且浏览器会检查证书链。

你们项目上线用HTTPS是必须的,登录接口尤其重要,别偷懒。
点赞
2026-03-17 06:01