HTTPS与SSL/TLS证书基础

HTTPS 是 HTTP 与 SSL/TLS 的结合,为 Web 通信提供加密、完整性校验与身份认证。本文记录 HTTPS 的工作原理、SSL/TLS 握手流程,并结合 Let's Encrypt 证书的申请与配置实操,理解证书链与密钥管理。

一、HTTPS解决的问题

HTTP 明文传输存在三大安全风险,HTTPS 通过以下机制解决:

二、对称加密与非对称加密

HTTPS 混合使用两种加密方式:

HTTPS 的核心思想是:用非对称加密协商出对称密钥,后续通信用对称密钥加密。

三、SSL/TLS握手流程

TLS 1.2 握手流程(简化):

双方根据 ClientRandom、ServerRandom、PreMasterSecret 计算出相同的会话密钥。TLS 1.3 简化为 1-RTT 握手,安全性更高。

四、证书链

证书信任基于链式结构:

验证时,浏览器从终端证书逐级向上验证签名,直到信任库中的根 CA。

服务器需配置完整证书链(终端证书 + 中间证书),否则部分客户端无法验证。Let's Encrypt 的 fullchain.pem 已包含完整链。

五、Let's Encrypt证书申请

使用 certbot 申请证书:

# 安装 certbot
sudo apt-get install -y certbot python3-certbot-nginx

# 申请证书(Nginx 插件自动验证)
sudo certbot certonly --nginx \
    -d p2pblaze.com -d www.p2pblaze.com \
    --non-interactive --agree-tos \
    --email 18718770325@163.com

# 证书文件位置
# /etc/letsencrypt/live/p2pblaze.com/fullchain.pem  完整证书链
# /etc/letsencrypt/live/p2pblaze.com/privkey.pem   私钥

六、Nginx配置HTTPS

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name p2pblaze.com www.p2pblaze.com;

    ssl_certificate     /etc/letsencrypt/live/p2pblaze.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/p2pblaze.com/privkey.pem;

    # 仅启用 TLS 1.2/1.3
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # 会话缓存提升性能
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    root /var/www/html;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}

# HTTP 跳转 HTTPS
server {
    listen 80;
    server_name p2pblaze.com www.p2pblaze.com;
    return 301 https://$host$request_uri;
}

七、证书自动续期

Let's Encrypt 证书有效期 90 天,certbot 安装时自动配置 systemd timer 续期:

# 测试续期流程(不实际续期)
sudo certbot renew --dry-run

# 查看 timer 状态
systemctl list-timers | grep certbot

# 手动续期并重载 Nginx
sudo certbot renew --deploy-hook "systemctl reload nginx"

八、验证

# 查看证书信息
openssl x509 -in /etc/letsencrypt/live/p2pblaze.com/cert.pem -noout -text

# 验证证书链
openssl s_client -connect p2pblaze.com:443 -servername p2pblaze.com

# 检查支持的协议与套件
nmap --script ssl-enum-ciphers -p 443 p2pblaze.com

# 在线检测:SSL Labs
# https://www.ssllabs.com/ssltest/

小结

HTTPS 通过非对称加密协商密钥、对称加密传输数据、证书实现身份认证。Let's Encrypt 让证书申请免费且自动化,配合 certbot 与 systemd timer 可实现零运维续期。生产环境务必禁用 TLS 1.0/1.1,仅保留 TLS 1.2+,并配置完整证书链与 HSTS。