指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

SSL和TLS区别

SSL 和 TLS 经常被混用,但它们其实有区别,而且 TLS 可以看作是 SSL 的升级版。我们可以从几个方面来理解它们的区别:

1. 定义

  • SSL (Secure Sockets Layer):由 Netscape 开发的加密协议,用于在客户端和服务器之间建立安全连接。历史版本有 SSL 2.0、SSL 3.0。
  • TLS (Transport Layer Security):SSL 的继任者,由 IETF 标准化,更安全、更高效。TLS 1.0~1.3 版本中,1.2 和 1.3 最常用。

2. 安全性

  • SSL 已经被认为不安全:

    • SSL 2.0 有多种漏洞,已经废弃。
    • SSL 3.0 存在 POODLE 攻击漏洞。
  • TLS 修复了 SSL 的很多问题,并且支持更强的加密算法。

3. 协议版本

协议发布年份特点
SSL 2.01995弱加密,不推荐使用
SSL 3.01996修复部分漏洞,但仍有安全隐患
TLS 1.01999SSL 3.0 升级版,支持更强算法
TLS 1.12006弱加密改进,支持更安全模式
TLS 1.22008常用版本,支持 AEAD 加密和 SHA-2
TLS 1.32018连接握手更快、更安全,去掉不安全算法

4. 握手方式

  • SSL:

    • 允许多种加密套件,但某些套件不安全。
    • 握手过程较复杂,通信加密过程较慢。
  • TLS:

    • 改进握手流程(TLS 1.3 更简化,只需一次 RTT)。
    • 强制使用更安全的加密算法,防止降级攻击。

5. 协议兼容性

  • TLS 向下兼容 SSL,但通常现代浏览器和服务器只支持 TLS。
  • 所以你现在在浏览器看到的 https://,实际上用的是 TLS,而不是传统 SSL。

总结一句话

TLS 是 SSL 的安全升级版,支持更强加密算法和更高效的握手,SSL 已经过时。


案例:

在 现代 Nginx 配置中,ssl 这个标记 在某些情况下仍然需要,但其意义已经和以前略有不同:


1. 作用

  • listen 443 ssl;

    • 告诉 Nginx 该端口是 HTTPS,需要使用证书进行加密。
    • 如果不加 ssl,Nginx 会把这个端口当作普通 HTTP(明文)端口,即使你配置了证书,也不会启用 TLS。
  • 所以它主要是端口绑定和加密开关,而不是说“使用 SSL 协议”。

2. 现代 Nginx 的变化

  • 在 Nginx 1.15.0 之后,你可以使用 listen 443 http2; 并且配合 ssl_certificate 和 ssl_certificate_key 自动启用 TLS。
  • 也就是说,如果你已经配置了证书,现代 Nginx 会自动启用 TLS,即使没有显式写 ssl。
  • 但是为了兼容老配置或明确标识,这个 ssl 仍然常用。

3. 推荐做法

# 推荐明确写 ssl
listen 443 ssl http2;
ssl_certificate /etc/nginx/certs/example.com.crt;
ssl_certificate_key /etc/nginx/certs/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
  • 明确写 ssl 可以:

    1. 保证向下兼容老版本 Nginx。
    2. 让配置语义更清晰:这个端口是 HTTPS/TLS。

总结一句话:

  • 不写 ssl 也可能生效(现代 Nginx),但写上 ssl 更安全、明确、兼容。