了解 SSL/TLS 证书
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 握手概述
- Client Hello – 浏览器表示“我想安全连接”。
- Server Hello – 服务器返回其证书(由 CA 签名)。
- Certificate Verification – 浏览器检查证书是否由受信任的 CA 签署。
- Key Exchange – 双方协商会话的加密密钥。
- 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,运行正常,用户可以通过安全隧道安全浏览。