了解 SSL/TLS 证书

发布: (2026年1月15日 GMT+8 13:47)
4 min read
原文: Dev.to

Source: Dev.to

名称游戏:SSL 与 TLS

SSL(安全套接字层)和 TLS(传输层安全)常被交替使用,但 SSL 实际上已经停用。自 1996 年以来它就没有更新,且存在大量安全漏洞。我们今天使用的一切实际上都是 TLS。

为什么我们仍然到处听到 “SSL”?它是人们最先学到的名称,于是业界在营销上一直沿用。当你今天购买一张 “SSL 证书” 时,实际上得到的是一张启用 TLS 的证书。

可以把 TLS 想象成两台计算机之间的安全隧道。当你在网站上点击 Proceed to Payment(继续付款)时,TLS 会创建一个加密隧道,将你的付款信息传输给支付处理方(例如 Visa 或 Stripe)。如果没有 TLS,任何人都可以拦截并读取这些数据。

证书颁发机构 (CAs)

在 TLS 世界中,验证证书合法性的“移民官员”被称为 证书颁发机构。流行的证书颁发机构包括:

  • Let’s Encrypt
  • Google Trust Services
  • Cloudflare
  • DigiCert
  • GoDaddy

生成私钥和 CSR

# Generate a private key
openssl genrsa -out private.key 2048

# Generate a CSR using the private key
openssl req -new -key private.key -out certificate.csr
  • private.key – 将此 SECRET 保存在服务器上;切勿共享。
  • certificate.csr – 将其发送给 CA。

提交 CSR 与验证

您将 CSR 提交给证书颁发机构(CA)。他们会进行以下验证:

  • 这是一家合法公司吗?
  • 您是否真的拥有/控制该域名?
  • 信息是否准确?

对于域名验证,CA 可能会要求您:

  • 添加 DNS 记录
  • 将特定文件上传到您的网站
  • 回复发送到您域名的电子邮件

已接收的签名证书

验证后,CA 返回带有其加密签名的证书——你的“盖章护照”。

certificate.crt   # Your signed certificate
ca-bundle.crt     # The CA's chain of trust

服务器配置

Nginx

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;

    # Modern TLS configuration
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
}

Apache

ServerName yourdomain.com

SSLEngine on
SSLCertificateFile /path/to/certificate.crt
SSLCertificateKeyFile /path/to/private.key
SSLCertificateChainFile /path/to/ca-bundle.crt

TLS 握手概述

  1. Client Hello – 浏览器表示“我想安全连接”。
  2. Server Hello – 服务器返回其证书(由 CA 签名)。
  3. Certificate Verification – 浏览器检查证书是否由受信任的 CA 签署。
  4. Key Exchange – 双方协商会话的加密密钥。
  5. Encrypted Communication – 所有数据通过安全隧道传输。

示例 HTTPS 请求(JavaScript)

fetch('https://api.example.com/payment', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    cardNumber: '4242424242424242',
    amount: 99.99
  })
});

TLS 会自动加密请求体中的所有内容。没有 TLS,网络上的任何人都可以读取你的卡号。

TLS 与 无 TLS

  • ❌ 密码以明文发送

  • ❌ 信用卡信息对攻击者可见

  • ❌ 会话令牌可能被窃取

  • ❌ 数据在传输中可能被篡改

  • ✅ 端到端全部加密

  • ✅ 通过 CA 验证真实性

  • ✅ 防御中间人攻击

  • ✅ 浏览器中令人安心的挂锁图标

Installing Certbot

# Install Certbot
sudo apt install certbot python3-certbot-nginx

# Get a certificate and auto‑configure Nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

# Auto‑renewal is set up automatically (certificates are valid for 90 days)

就这样。您现在已经启用了 TLS,运行正常,用户可以通过安全隧道安全浏览。

Back to Blog

相关文章

阅读更多 »

[iOS] 调试 SSL 握手失败

问题:意外的配置冲突 最近,我们的监控仪表板开始出现零星的网络错误日志。它们并不是你常见的…