Loading

acme.sh如何添加并续签SSL/TLS证书【保姆级教程】

以下是从安装到自动续签的完整操作流程:使用 acme.sh

一: 安装 acme.sh

curl https://get.acme.sh | sh -s email=your_email@example.com

 

重要说明:

  • 将 your_email@example.com 替换为您的真实邮箱,这个邮箱用于接收证书到期提醒和账户通知。

  • 这个命令会自动将 acme.sh 安装到您的 ~/.acme.sh/ 目录下。

  • 安装完成后会自动创建一个定时任务(Cron Job),用于自动续签证书。您可以通过 crontab -l 查看。

安装后需要重新加载配置或重新登录:

source ~/.bashrc
# 或者直接执行
bash

二:签发证书(DNS验证方式)

登录 DNSJD 后台,这里以京东云为例

  • 点击页面右上角头像、点击 Access Key 
    image

  • 点击创建 Access Key,就能生成一个随机的 Access Key IDAccess Key Secret。就可以得到:
    image

    AccessKey ID:AKxxxxxxxxxxxxxxxxxxxxxxxx  
    Secret Access Key:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  • 在云主机里 export 变量:

    export JD_ACCESS_KEY_ID="AKxxxxxxxxxxxxxxxxxxxxxxxx"
    export JD_SECRET_ACCESS_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  • 签发证书:

    # 申请证书,执行后参数将保存至 ~/.acme.sh/account.conf 在自动续期时使用
    acme.sh --issue --dns dns_jd -d carvernote.com -d '*.carvernote.com'

    这一步 acme.sh 会自动调用京东云解析 API 添加 TXT 记录,验证通过后立刻删除,无需你手工干预。


三:安装/部署证书(示例:Nginx):

因为生成的证书相关配置文件在目录:~/.acme.sh/中的对应域名_ecc下,但强烈建议 复制到固定目录 再引用,防止日后 acme.sh 升级或路径变动:

例如:

//创建固定的目录
mkdir -p /etc/nginx/ssl
//复制文件到固定的目录
cp /root/.acme.sh/example.com_ecc/fullchain.cer /etc/nginx/ssl/example.com.crt
cp /root/.acme.sh/example.com_ecc/example.com.key /etc/nginx/ssl/example.com.key

因此给 Nginx 配证书时,只要:

ssl_certificate     /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;

四:让 acme.sh 以后自动复制并 reload:

acme.sh --install-cert -d example.com \
        --fullchain-file /etc/nginx/ssl/example.com.crt \
        --key-file       /etc/nginx/ssl/example.com.key \
        --reloadcmd     "nginx -t && systemctl reload nginx"

五:配置ssl到nginx服务器【访问80端口强制跳转到443的域名服务】:

server
{
    listen 80;
    server_name www.example.com;
    return 301 https://www.example.com$request_uri;
}

server
{
    listen 80;
    server_name example.com;
    return 301 https://example.com$request_uri;
}


server
{
    listen 443 ssl;
    http2 on;
    server_name example.com;
    ssl_certificate     /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/example.com;

    access_log  /www/wwwlogs/example.com.log;
    error_log  /www/wwwlogs/example.com.error.log;
}

server
{
    listen 443 ssl;
    http2 on;
    server_name www.example.com;
    ssl_certificate     /etc/nginx/ssl/example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com.key;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/example.com;

    access_log  /www/wwwlogs/example.com.log;
    error_log  /www/wwwlogs/example.com.error.log;
}

六:后续维护:

  • 证书到期前 30 天 acme.sh 会自动续签自动复制、自动 reloadcmd无需人工干预

  • 若要手动测试续期

    acme.sh --renew -d example.com --dns dns_jd --force

七:常见坑复查表

现象 检查点
80 不跳转 ① curl -I http://域名 看是否 301;② 安全组是否放行 80;③ DNS 是否指向本机
跳转后 URI 带空格 配置里 https://$host $request_uri 多了空格,去掉即可
浏览器仍显示旧证书 确认 ssl_certificate 路径指向 /etc/nginx/ssl/example.com.crt 且已 reload

把上面代码整段复制即可上线,今后只改业务代码,不用再碰证书。

posted @ 2025-11-07 13:00  Carvers  阅读(167)  评论(0)    收藏  举报