通过acme生成与续签ssl证书,并部署到nginx

通过acme生成与续签ssl证书,并部署到nginx

介绍

官方介绍: acme.sh 实现了 acme 协议,可以从 ZeroSSLLet's Encrypt 等 CA 生成免费的证书。

安装 acme.sh

1. curl方式
curl https://get.acme.sh | sh -s email=my@example.com
2. wget方式
wget -O -  https://get.acme.sh | sh -s email=my@example.com
3. 国内方式安装
# 如果你的安装服务器位于中国大陆境内, 访问 github 可能会不成功. 所以安装可能会失败.
# 因此可以访问acme gitee ,地址为:https://github.com/acmesh-official/acme.sh/wiki/Install-in-China
# 安装方法如下:
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m my@example.com

刷新环境变量

source ~/.bashrc

生成证书

官方介绍摘抄: 如果使用手动验证,acme.sh 将无法自动更新证书,每次都需要手动添加解析来验证域名所有权。如果有自动更新证书的需求,请使用自动验证(DNS API)。 DNS 方式的真正强大之处在于可以使用域名解析商提供的 API 自动添加 TXT 记录,且在完成验证后删除对应的记录。acme.sh 目前支持超过一百家的 DNS API。

因此,本文采用DNS API验证来生成证书。

阿里云(万网)设置

设置Ali_Key与Ali_Secret

export Ali_Key="<key>"
export Ali_Secret="<secret>"

签发通配符证书

./acme.sh --issue --dns dns_ali -d example.com -d *.example.com
其他厂商
# 支持国内常见的华为云,腾讯云等。
# 详见官方文档:https://github.com/acmesh-official/acme.sh/wiki/dnsapi#dns_ali

复制证书

Nginx 示例
acme.sh --install-cert -d example.com \
--key-file       /path/to/keyfile/in/nginx/key.pem  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
# 如果你是docker部署nginx,则修改为:--reloadcmd     "docker restart nginx"
--reloadcmd     "service nginx reload"
注意事项

默认情况下,证书每 60 天更新一次(可自定义)。更新证书后,Apache 或者 Nginx 服务会通过 reloadcmd 传递的命令自动重载配置。

注意:reloadcmd 非常重要。 证书会自动申请续签,但是如果没有正确的 reloadcmd 命令,证书可能无法被重新应用到 Apache 或者 Nginx,因为配置没有被重载。

查看已安装证书信息

acme.sh --info -d example.com

Nginx配置

server {
    listen 443 ssl;
    server_name localhost;

    ssl_certificate /acme/ssl/nginx/cert.pem;
    ssl_certificate_key /acme/ssl/nginx/key.pem;

    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
        try_files  $uri $uri/ /index.html;
    }        

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}

附录:详细配置

#  参考地址:https://cloud.tencent.com/document/product/400/35244
server {
     #SSL 默认访问端口号为 443
     listen 443 ssl; 
     #请填写绑定证书的域名
     server_name cloud.tencent.com; 
     #请填写证书文件的相对路径或绝对路径
     ssl_certificate cloud.tencent.com_bundle.crt; 
     #请填写私钥文件的相对路径或绝对路径
     ssl_certificate_key cloud.tencent.com.key; 
     ssl_session_timeout 5m;
     #请按照以下协议配置
     ssl_protocols TLSv1.2 TLSv1.3; 
     #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
     ssl_prefer_server_ciphers on;
     location / {
         #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
         #例如,您的网站主页在 Nginx 服务器的 /etc/www 目录下,则请修改 root 后面的 html 为 /etc/www。
         root html; 
         index  index.html index.htm;
     }
 }
<think>好的,我现在需要帮助用户配置Nginx使用ZeroSSLACME协议自动续签SSL证书。首先,我得回忆一下ACME.sh工具的使用,因为用户提到了ACME协议和ZeroSSL。记得ACME.sh是一个常用的脚本,用于自动化证书颁发和管理。 用户之前可能尝试过默认的ZeroSSL,但引用[1]提到建议改用Let's Encrypt,但用户现在明确想用ZeroSSL,所以需要调整。根据引用[4],切换CA可能需要使用`acme.sh --set-default-ca --server zerossl`,但不确定是否需要账户。ZeroSSL需要邮箱注册,可能还需要API密钥?或者是否可以用ACME.sh自动注册? 然后,用户需要生成证书生成证书通常需要验证域名所有权,通常有HTTP或DNS验证两种方式。假设用户使用HTTP验证,需要配置Nginx的webroot路径,以便ACME.sh可以写入验证文件。需要确认Nginx的配置中,对应域名的webroot目录是否正确,允许访问.well-known/acme-challenge路径。引用[2]和[3]提到安装证书时的路径设置,以及reloadcmd的使用。 接下来是安装证书Nginx。用户需要指定证书和私钥的存放路径,设置自动重载Nginx的命令。根据引用[2]中的示例,安装命令应该包括--key-file和--fullchain-file,然后reloadcmd用"service nginx force-reload"或者"systemctl reload nginx"。 另外,用户可能还需要生成Diffie-Hellman参数,如引用[2]中的openssl dhparam命令,这一步可能需要较长时间,但有助于增强安全性。 自动续签方面,ACME.sh默认每60天续签一次,引用[3]提到这一点,所以需要确认cron任务是否已正确安装,确保续签过程自动进行。 总结步骤应该是:安装ACME.sh,设置ZeroSSL为默认CA,注册账户,生成证书(配置Nginx的webroot),安装证书到指定路径,配置NginxSSL设置指向这些路径,设置自动重载,最后测试续签。同时可能需要处理dhparam的生成以提高安全性。 需要检查用户是否已经安装ACME.sh,如果没有的话,需要指导如何安装。然后逐步执行每个步骤,确保命令正确,特别是路径和域名的替换部分。可能遇到的错误包括权限问题、路径错误或验证失败,需要提示用户检查日志。 最后,生成相关问题时要围绕ACME.sh的其他功能、不同的验证方法、证书续期原理以及ZeroSSLLet's Encrypt的区别等方面提问。</think>### 配置Nginx使用ZeroSSLACME协议自动续签SSL证书的步骤 #### 1. 安装acme.sh脚本 ```bash curl https://get.acme.sh | sh source ~/.bashrc # 或重新登录终端 ``` 安装后,脚本会自动注册ZeroSSL为默认CA(需邮箱验证)[^4]。如需强制使用ZeroSSL: ```bash acme.sh --set-default-ca --server zerossl ``` #### 2. 注册ZeroSSL账户(需API) ```bash acme.sh --register-account -m your_email@example.com --server zerossl ``` #### 3. 配置Nginx验证目录 在Nginx配置文件中添加以下内容(确保路径可写): ```nginx server { listen 80; server_name example.com; location /.well-known/acme-challenge { root /var/www/html; } } ``` 重启Nginx使配置生效: ```bash systemctl reload nginx ``` #### 4. 申请证书 ```bash acme.sh --issue -d example.com -w /var/www/html --nginx ``` 参数说明: - `-d`:域名 - `-w`:webroot验证目录 - `--nginx`:自动检测Nginx配置 #### 5. 安装证书Nginx路径 ```bash acme.sh --install-cert -d example.com \ --key-file /etc/nginx/ssl/example.com.key \ --fullchain-file /etc/nginx/ssl/example.com.crt \ --reloadcmd "systemctl reload nginx" ``` 此操作会将证书路径写入`~/.acme.sh/example.com/example.com.conf`,绑定自动重载命令[^3]。 #### 6. 配置Nginx SSL ```nginx server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; # 增强安全性配置(可选) ssl_dhparam /etc/nginx/dhparam.pem; # 需提前生成:openssl dhparam -out /etc/nginx/dhparam.pem 2048[^2] ssl_protocols TLSv1.2 TLSv1.3; } ``` #### 7. 验证自动续期 手动测试续期: ```bash acme.sh --renew -d example.com --force ``` 脚本会通过cron自动续期(默认60天),可通过`crontab -l`查看任务。 --- ### 常见问题排查 - **验证失败**:检查`/var/www/html/.well-known/acme-challenge`是否可访问 - **权限问题**:确保`/etc/nginx/ssl`目录存在且有写入权限 - **证书未更新**:检查`acme.sh`日志文件`~/.acme.sh/acme.sh.log` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值