HTTP、HTTPS、TLS 和 SSL 证书

HTTP:HyperText Transfer Protocol 超文本传输协议。

HTTPS :Hypertext Transfer Protocol Secure 超文本传输安全协议

TLS : Transport Layer Security 传输层安全性协议

SSL :Secure Sockets Layer 安全套接字层

TLS 是 SSL 的升级版,HTTPS 现在使用的是 TLS,而不是早期的 SSL。

SSL 是 TLS 的前身,现在 HTTPS 使用 TLS 协议;“SSL证书”只是历史叫法,实际保护网站的是 TLS。

SSL 证书这个名字是历史遗留叫法,现在实际用于 TLS 协议。

它本质上是一个 数字证书(Digital Certificate),作用是:

向访问者证明:“这个服务器确实拥有这个域名,并且它拥有对应的密码学身份。”

简单说,HTTPS = HTTP + TSL 加密。

HTTP 是一种协议用于浏览器和服务器之间的通信,但是这只是一种信息传递的方式规则,这个规则不会对传递的信息进行加密,而TLS是一种加密的协议,将二者结合就可以实现加密通讯,从而保证信息安全,而这就是 HTTPS。

TLS 负责:

  • 加密:防止别人读取内容
  • 身份验证:通过证书确认服务器身份
  • 完整性保护:发现数据是否被篡改

TLS 的加密包括,信息加密,身份验证和完整性保护等,TLS 不是单独的加密算法,TLS 会使用多种密码学算法,但它本身不是其中任何一种。

SSL 证书是由受浏览器信任的证书颁发机构(也就是 CA)签发的。用于验证这个域名在这个服务器的控制之下。防止 DNS 拦截,或者伪装成这个网站。SSL 证书是 TLS 身份验证的一部分。

SSL 证书任何人都可以签发,但是不一定会被信任,一般来说,只有大型的 CA 签发的证书才被浏览器信任。对于不信任的证书,服务器可以加密传输信息,但是不能确定这个服务器是否就是此域名的服务器,一般浏览器会警告(不信任的证书)。

协议本质是什么

“协议”不是某个程序,也不是某种单独的加密算法,而是一套通信规则。

它规定通信双方:

  • 先发送什么数据;
  • 收到后如何处理;
  • 使用什么格式;
  • 如何选择加密算法;
  • 如何验证证书;
  • 如何生成密钥;
  • 出错时如何终止连接。

这些HTTPS 或者TLS的协议我们都是有的,所以只需要申请一个证书,就可以使用HTTPS进行连接了?

对,理解方向基本正确:

浏览器、Nginx 等软件已经实现了 HTTP 和 TLS 协议。你不需要自己编写加密算法,只需要给服务器配置一套有效的证书和私钥,Nginx 就能使用 TLS 提供 HTTPS。

但严格来说,不是“只有证书文件就够了”,还需要几个条件同时满足。

实际需要的东西

1. 支持 TLS 的服务器程序,例如 Nginx
2. 域名,例如 meet.example.com
3. 该域名对应的 TLS 证书
4. 与证书公钥配对的私钥
5. Nginx 的 HTTPS 配置
6. 公网开放 443 端口

证书和私钥一般是:

fullchain.pem    证书和证书链,可以公开
privkey.pem      网站私钥,必须保密

Nginx 配置类似:

server {
    listen 443 ssl;
    server_name meet.example.com;

    ssl_certificate
        /etc/letsencrypt/live/meet.example.com/fullchain.pem;

    ssl_certificate_key
        /etc/letsencrypt/live/meet.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

配置完成后,Nginx 自动完成这些工作:

浏览器发起 TLS 握手
        ↓
Nginx 发送证书
        ↓
浏览器验证域名、CA 签名和有效期
        ↓
Nginx 用私钥证明自己是证书持有者
        ↓
双方协商会话密钥
        ↓
开始传输加密的 HTTP 数据

所以你不需要手动处理:

加密算法
数字签名计算
密钥交换
会话密钥生成
HTTP 数据加密和解密

这些都由浏览器和 Nginx 的 TLS 实现自动完成。

为什么必须申请证书

TLS 协议本身只是规定:

双方应该怎样建立安全连接。

但浏览器还需要知道:

当前连接的服务器是不是 meet.example.com 的真实服务器。

证书就是解决这个身份问题的。

没有证书,也可以建立某种加密连接,但浏览器无法确认对方身份,容易遭受中间人攻击。

证书和私钥必须配套

只有证书:

fullchain.pem

是不够的。

因为证书中的公钥对应一把私钥,Nginx 必须拥有:

privkey.pem

才能完成 TLS 握手中的身份认证。

可以理解成:

证书 = 公开身份证
私钥 = 只有本人拥有的身份凭据

攻击者可以复制公开证书,但没有私钥,仍然无法正常冒充网站。

Certbot 为什么方便

你执行:

sudo certbot --nginx -d meet.example.com

Certbot通常会自动:

生成或管理私钥
向 Let's Encrypt 申请证书
完成域名控制验证
下载证书链
修改 Nginx 配置
启用 443
配置自动续期
重新加载 Nginx

所以从使用者角度看,确实接近:

申请一张证书,配置到 Nginx,就可以使用 HTTPS。

更准确的一句话是:

HTTP 和 TLS 协议已经由浏览器、操作系统和 Nginx 实现;我们只需要准备有效证书及对应私钥,并让 Nginx 在 443 端口加载它们,就能提供受浏览器信任的 HTTPS 服务。

posted @ 2026-07-28 18:40  blind5883  阅读(15)  评论(0)    收藏  举报