前提:1.nginx已安装好

2.本文假设nginx的安装目录为:/etc/nginx/,可自定义修改为自己的地址

3.为自动续签方便,生成时不需要输入密码

优点:直接完全无密码、自动续签、不用任何干预的版本。

  1. 创建目录
    rm -rf /etc/nginx/ssl
    mkdir -p /etc/nginx/ssl/ca
    mkdir -p /etc/nginx/ssl/certs
    cd /etc/nginx/ssl/ca

  2. 生成无密码私有 CA
    openssl genrsa -out ca.key 4096
    openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt -subj "/C=CN/ST=Internal/L=Internal/O=Internal/CN=10.21.0.70"

  3. 创建无密码自动续签脚本
    vi /etc/nginx/ssl/renew_cert.sh

    粘贴下面全部内容,换下ip:

    #!/bin/bash
    
    DOMAIN="这里是你的ip或域名"
    #有效期
    CERT_DAYS=90 
    
    CA_KEY="/etc/nginx/ssl/ca/ca.key"
    CA_CERT="/etc/nginx/ssl/ca/ca.crt"
    SERVER_KEY="/etc/nginx/ssl/certs/server.key"
    SERVER_CERT="/etc/nginx/ssl/certs/server.crt"
    CSR_FILE="/etc/nginx/ssl/certs/server.csr"
    
    # 生成服务器密钥
    openssl genrsa -out $SERVER_KEY 2048
    
    # 生成证书请求
    openssl req -new -key $SERVER_KEY -out $CSR_FILE -subj "/CN=$DOMAIN"
    
    # 签发证书(无密码)
    openssl x509 -req -in $CSR_FILE -CA $CA_CERT -CAkey $CA_KEY -CAcreateserial \
    -out $SERVER_CERT -days $CERT_DAYS -sha256
    
    # 重载 nginx
    nginx -t && systemctl reload nginx
    
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] 证书自动更新完成" >> /var/log/nginx_cert_renew.log

    赋予权限:

    chmod +x /etc/nginx/ssl/renew_cert.sh

    运行脚本,首次生成证书:

    /etc/nginx/ssl/renew_cert.sh

  4. Nginx HTTPS 配置
    server {
        listen 这里是端口 ssl;
        server_name 这里是你的ip或域名;
    
        ssl_certificate     /etc/nginx/ssl/certs/server.crt;
        ssl_certificate_key /etc/nginx/ssl/certs/server.key;
        ssl_trusted_certificate /etc/nginx/ssl/ca/ca.crt;
    
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
    
        # 这里是你的网站目录,按实际修改
        root /usr/share/nginx/html;
        index index.html;
    }

    测试并重启:

    nginx -t
    systemctl restart nginx
  5. 每月自动续签(无人值守)

        运行定时任务:

crontab -e

        添加:

0 3 1 * * /etc/nginx/ssl/renew_cert.sh >> /var/log/nginx_cert_renew.log 2>&1

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐