背景
HTTPS常见问题
- 为什么用了 HTTPS 就是安全的?
- HTTPS 的底层原理如何实现?
- 用了 HTTPS 就一定安全吗?
HTTPS交互过程
证书验证阶段
- 浏览器发起https请求
- 服务端返回SSL/TLS证书,包含公钥与由可信任的证书颁发机构(CA)前面的数字签名
- 浏览器验证证书是否合法
- 证书颁发机构是否可信
- 证书是否过期
- 证书中域名与访问的域名是否匹配
数据传输阶段
- 证书验证合法后,浏览器生成随机的对称密钥
- 浏览器公钥加密生成的对称密钥后传输给浏览器
- 浏览器用私钥解密得到对称密钥
- 浏览器和服务器间使用对称密钥加密来对数据加解密
使用HTTPS好处
- 保护用户隐私
- 防止篡改
- 验证服务器的身份
HTTP的安全与不安全
HTTPS如何保证安全
数据加密
- 对称加密:数据传输使用对称加解密(AES,DES等),效率高,适合对大数据量加密
- 非对称加密:会话密钥协商阶段,使用非对称加密(如RSA)加密对称密钥,保证密钥传输安全性
数据完整性
数据传输前生成一个哈希值,使用消息摘要算法(如SHA-256),接受方可以计算哈希值进行对比
服务器认证
证书由专业颁发机构(CA)签名,保证了服务器的身份
防止重放攻击
随机数、时间戳等
HTTPS的不安全因素
不正确的配置
- 弱加密算法:服务器使用了过时或较弱的加密算法(如md5)
- 证书配置错误:证书未正确配置(证书链不完整,证书签发给错误的域名),浏览器无法验证,但用户选择了忽略安全警告
- 中间件或者第三方组件的漏洞:使用HTTPS的应用可能依赖了中间件和第三方库
中间人攻击
- SSL/TLS剥离攻击(SSL Stripping):攻击者将用户HTTPS请求降级为HTTP,而用户忽视了警告
- 恶意证书颁发机构:CA被攻破,攻击者获取合法的伪造证书
社会工程攻击
- 钓鱼网站
- 恶意软件:修改系统的可信根证书,添加恶意的CA证书,从而劫持HTTPS请求
HTTPS漏洞
- TLS协议漏洞:随着时间的推移,TLS协议中可能会发现新的漏洞,例如历史上著名的Heartbleed、POODLE、BEAST攻击等。这些漏洞可以被利用来攻击HTTPS连接。
- 服务器或客户端漏洞:HTTPS的安全性也依赖于服务器和客户端的实现。例如,如果服务器的软件版本过旧,或者客户端的TLS实现有漏洞,都会影响HTTPS的整体安全性
如何提高HTTPS正确性
使用强加密算法:配置服务器使用最新和强大的加密算法(如AES-GCM、ECDHE)和TLS版本(如TLS 1.2或1.3)。禁用弱加密算法和协议(如SSL 2.0/3.0)。
正确配置证书:确保证书链完整,证书颁发机构可信,并且证书签发的域名与网站匹配。使用EV(扩展验证)证书进一步提高可信度。
启用HSTS:通过启用HTTP严格传输安全(HSTS),强制浏览器在未来的访问中始终使用HTTPS,防止SSL剥离攻击。
定期更新和审计:定期更新服务器和客户端软件,修补已知的漏洞。定期审计配置,确保不存在错误或过时的配置。
监控和检测:部署监控工具来检测和预防中间人攻击、伪造证书攻击等威胁。通过浏览器的证书透明性日志(Certificate Transparency)监控你的域名是否有异常的证书签发。
用户教育:教育用户如何识别钓鱼网站和其他社会工程攻击。指导用户如何查看浏览器中的证书信息,确保访问的是合法的HTTPS网站。
Q&A
数据传送为什么不需要先用对称公钥加密再用对称密钥加密
非对称加解密的效率很低,而https场景中存在大量交互
浏览器中没有非对称加密的私钥,无法对数据进行解密
为什么需要CA机构颁发的证书
HTTP传输过程中容易被监听或者伪造服务器,如果任何人都可以构造证书,就会产生中间人攻击
HTTPS产生性能开销优化
现代硬件和优化手段(如HTTP/2、TLS Session Resumption等)已经大大降低了这种开销
- HTTP/2:支持多路复用、头部压缩等特性
- TLS Session Resumption:通过会话缓存或会话票证(Session Ticket)来复用之前的加密会话,减少握手开销
- 使用现代加密算法:更高效的加密算法(如AES-GCM)来提升性能