GKLBB

当你经历了暴风雨,你也就成为了暴风雨

导航

运维常见问题 --- 如何实现个人网站ssl证书免费无限自动续约

举例环境是nginx和windows上配置,其他类似只是配置不同

  1. 首先,下载 win-acme 工具:
  • 访问 https://github.com/win-acme/win-acme/releases
  • 下载最新版本的 win-acme.v2.x.x.xxx.x64.pluggable.zip
  • 解压到一个固定的目录,比如 C:\win-acme
  1. 准备工作:
  • 确保你的Nginx已经正确配置并运行
  • 确保你的域名已经正确解析到你的服务器IP
  • 记下你的Nginx网站根目录路径
  1. 运行证书申请:
  • 以管理员身份打开命令提示符
  • 进入win-acme目录
  • 运行 wacs.exe
  • 选择 N 创建新证书
  • 选择证书类型(通常选择单域名证书)
  • 输入你的域名
  • 选择验证方式:建议选择选项1 "[http] 在网络路径保存验证文件"
  • 输入你的Nginx网站根目录路径(比如 C:\nginx\html
  • 在你的证书生成目录下会发现两个文件,一个key.pem,一个crt.pem
  1. Nginx配置示例:
server {
    listen 80;
    server_name your-domain.com;
    
    # 用于验证的配置
    location /.well-known/acme-challenge/ {
        root C:/nginx/html;  # 改成你的实际网站根目录
    }

    # 将http重定向到https
    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl;
    server_name your-domain.com;

    # 证书配置
    ssl_certificate C:/Certificates/your-domain.com/crt.pem;
    ssl_certificate_key C:/Certificates/your-domain.com/key.pem;

    # 其他SSL配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    
    location / {
        root C:/nginx/html;
        index index.html;
    }
}
  1. 自动续约设置:
  • win-acme会自动创建一个Windows计划任务
  • 你可以在Windows任务计划程序中找到它
  • 默认会在证书过期前自动续约
  • 你可以在Windows任务计划程序中查看和修改续约计划
  1. 验证安装:
  • 重启Nginx:nginx -s reload
  • 访问你的https网站验证证书是否正常工作
  • 可以通过 https://www.ssllabs.com/ssltest/ 测试证书状态

检测续约成功

 

 

在Linux系统上使用Nginx配置Let's Encrypt证书的完整步骤:

  1. 安装必要软件:
 
# Ubuntu/Debian系统
sudo apt update
sudo apt install nginx certbot python3-certbot-nginx

# CentOS系统
sudo yum install epel-release
sudo yum install nginx certbot python3-certbot-nginx

 

  1. 配置Nginx基础配置:
 
# /etc/nginx/conf.d/example.conf
server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/html;

    # 用于验证的配置
    location /.well-known/acme-challenge/ {
        root /var/www/html;
    }
}

 

  1. 申请证书:
 
# 自动配置nginx
sudo certbot --nginx -d example.com -d www.example.com

# 或者只申请证书不修改nginx配置
sudo certbot certonly --nginx -d example.com -d www.example.com

 

  1. 完整的Nginx HTTPS配置:
# /etc/nginx/conf.d/example.conf
server {
    listen 80;
    server_name example.com www.example.com;
    # 将HTTP重定向到HTTPS
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com www.example.com;
    root /var/www/html;

    # SSL配置
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    
    # SSL优化配置
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    # 现代配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # HSTS配置(谨慎使用)
    # add_header Strict-Transport-Security "max-age=63072000" always;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    # 其他安全headers
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";

    # 网站配置
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 性能优化
    location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
        expires 30d;
        access_log off;
    }
}

 

  1. 设置自动续期:
# 测试续期
sudo certbot renew --dry-run

# 添加定时任务
sudo crontab -e

# 添加以下内容(每天两次尝试续期)
0 0,12 * * * certbot renew --quiet --post-hook "systemctl reload nginx"

 

  1. 证书管理命令:
# 查看证书列表
sudo certbot certificates

# 删除证书
sudo certbot delete --cert-name example.com

# 手动续期
sudo certbot renew

 

  1. 安全加固:
# 设置证书目录权限
sudo chmod -R 700 /etc/letsencrypt/live/
sudo chmod -R 700 /etc/letsencrypt/archive/

# 备份证书
sudo tar -czf letsencrypt-backup.tar.gz /etc/letsencrypt

 

  1. 监控脚本示例:
#!/bin/bash
# check_cert.sh
domain="example.com"
exp_date=$(openssl s_client -connect ${domain}:443 -servername ${domain} 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
exp_epoch=$(date -d "${exp_date}" +%s)
current_epoch=$(date +%s)
days_left=$(( (exp_epoch - current_epoch) / 86400 ))

if [ $days_left -lt 30 ]; then
    echo "警告:证书将在 ${days_left} 天后过期"
    # 添加告警通知代码
fi

 

  1. 常见问题处理:

a. 续期失败:

 
# 查看续期日志
sudo tail -f /var/log/letsencrypt/letsencrypt.log

# 手动强制续期
sudo certbot renew --force-renewal

 

b. Nginx配置测试:

 
# 测试配置
sudo nginx -t

# 重新加载配置
sudo nginx -s reload
  1. 性能优化建议:
 
# 添加到http块
http {
    # 启用OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    
    # 启用session缓存
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    
    # 启用HTTP/2
    listen 443 ssl http2;
}

 

使用限制:

  • 每个域名每周可以请求的新证书数量有限制
  • 每个证书最多可包含100个域名
  • 证书有效期为90天

只能签发DV证书

 

补充知识:

三种证书的区别:

  1. 安全性能力:
  • DV证书:

    • 仅提供基础的SSL/TLS加密
    • 只保证数据传输安全
    • 不验证网站运营者身份
  • OV证书:

    • 提供SSL/TLS加密
    • 包含企业身份信息
    • 证实网站运营者为合法注册企业
  • EV证书:

    • 最高级别加密保护
    • 完整的企业身份验证
    • 最严格的身份审核标准
  1. 申请流程和时间:
  • DV证书:

    • 全自动验证
    • 几分钟到几小时完成
    • 仅需证明域名控制权
  • OV证书:

    • 需人工审核
    • 1-3个工作日
    • 需提供企业资质文件
  • EV证书:

    • 最严格的人工审核
    • 5-7个工作日或更长
    • 需提供全面的企业认证材料
  1. 成本价格:
  • DV证书:

    • 免费(Let's Encrypt)
    • 或每年几百元
    • 最经济的选择
  • OV证书:

    • 每年几千元
    • 中等价位
    • 适合一般企业预算
  • EV证书:

    • 每年上万元起
    • 最贵的选择
    • 需要较大投入
  1. 浏览器显示效果:
  • DV证书:

    • 普通锁标志
    • 不显示组织信息
    • 基础https标识
  • OV证书:

    • 锁标志
    • 显示组织名称
    • 点击可查看详细信息
  • EV证书:

    • 绿色地址栏(部分浏览器)
    • 显示完整企业名称
    • 最高级别的视觉信任标识
  1. 适用场景:
  • DV证书:

    • 个人博客
    • 信息类网站
    • 小型企业网站
    • 测试环境
  • OV证书:

    • 电商网站
    • 企业官网
    • 社交平台
    • 需要身份可信的场景
  • EV证书:

    • 银行网站
    • 支付平台
    • 金融机构
    • 政府网站
    • 大型企业官网
  1. 验证内容:
  • DV证书:

    • 仅验证域名所有权
    • 通过DNS或文件验证
    • 不验证组织信息
  • OV证书验证:

    • 域名所有权
    • 企业营业执照
    • 组织机构代码
    • 企业电话地址
  • EV证书验证:

    • 所有OV证书要求
    • 法律文件审查
    • 银行账户验证
    • 实地考察(可能)
    • 多重交叉验证
  1. 主要优势:
  • DV证书:

    • 快速部署
    • 成本低
    • 自动化程度高
    • 适合小规模使用
  • OV证书:

    • 增加用户信任
    • 证明企业身份
    • 性价比适中
    • 适合一般商用
  • EV证书:

    • 最高信任等级
    • 最强身份证明
    • 最佳品牌展示
    • 适合高要求场景

选择建议:

  1. 如果是个人网站或小型项目,选择DV证书足够
  2. 如果是企业网站需要展示可信度,选择OV证书
  3. 如果是金融相关或需要最高信任级别,选择EV证书

 

posted on 2024-12-21 07:27  GKLBB  阅读(114)  评论(0)    收藏  举报