← 返回首页
🔐

SSL证书管理

📂 devops ⏱ 2 min 249 words

SSL证书管理

SSL证书类型

类型 验证方式 适用场景
DV 域名验证 个人网站
OV 组织验证 企业网站
EV 扩展验证 金融机构
自签名 无验证 内部测试

Let's Encrypt证书

安装Certbot

# Ubuntu/Debian
sudo apt-get install certbot python3-certbot-nginx

# CentOS/RHEL
sudo yum install certbot python3-certbot-nginx

申请证书

# 使用Nginx插件
sudo certbot --nginx -d example.com -d www.example.com

# 使用Webroot
sudo certbot certonly --webroot -w /var/www/html -d example.com

# 使用Standalone
sudo certbot certonly --standalone -d example.com

自动续期

# 测试续期
sudo certbot renew --dry-run

# 配置自动续期
echo "0 0,12 * * * root certbot renew --quiet --post-hook 'systemctl reload nginx'" | sudo tee /etc/cron.d/certbot

Nginx SSL配置

server {
    listen 443 ssl http2;
    server_name example.com;
    
    # 证书路径
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    
    # SSL优化
    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;
    
    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    
    # HSTS
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}

# HTTP重定向
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

Docker环境证书管理

version: '3.8'

services:
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./certs:/etc/nginx/certs
      - ./html:/usr/share/nginx/html

  certbot:
    image: certbot/certbot
    volumes:
      - ./certs:/etc/letsencrypt
      - ./html:/var/www/html
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"

实践:自动化证书管理

#!/bin/bash
# cert-renew.sh

DOMAIN="example.com"
WEBROOT="/var/www/html"

# 检查证书是否需要续期
if certbot certificates | grep -q "Expiring"; then
    echo "证书即将过期,开始续期..."
    
    # 续期证书
    certbot renew --webroot -w $WEBROOT
    
    # 重新加载Nginx
    systemctl reload nginx
    
    echo "证书续期完成"
else
    echo "证书状态正常"
fi

证书检查

# 查看证书信息
openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -noout -dates

# 检查远程证书
openssl s_client -connect example.com:443 </dev/null 2>/dev/null | openssl x509 -noout -dates

# 验证证书链
openssl verify -CAfile /etc/letsencrypt/live/example.com/chain.pem /etc/letsencrypt/live/example.com/cert.pem

通配符证书

# 申请通配符证书
sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com" -d example.com

# DNS验证
# 添加TXT记录: _acme-challenge.example.com

总结

SSL证书管理是Web安全的基础。使用Let's Encrypt和自动化工具,可以实现免费、自动化的证书管理。