火山引擎云服务器用acme.sh安装免费SSL证书(Let's Encrypt)

本文针对火山引擎云服务器(支持CentOS、Ubuntu、Debian主流系统),详细讲解使用 acme.sh 脚本快速申请、安装 Let's Encrypt 免费SSL证书的完整流程,包括证书自动续期、Nginx配置生效,全程无需手动操作复杂步骤,适合新手快速上手实现网站HTTPS加密访问。

一、前置条件

注意:Let's Encrypt 免费SSL证书有效期为90天,acme.sh 会自动配置定时任务(每日检查),证书到期前自动续期,无需手动干预,续期成功率接近100%。
重要提醒:火山引擎国内节点服务器,若域名要对外提供服务,需先完成ICP备案,备案通过后再配置SSL证书,否则域名无法正常解析访问;海外节点服务器无需备案,可直接操作。

二、步骤1:安装 acme.sh 脚本

acme.sh 是一款开源的SSL证书申请工具,无需依赖复杂的系统环境,一键安装即可使用,支持多种验证方式和自动续期。

1.1 一键安装 acme.sh

登录火山引擎云服务器(SSH工具:Xshell、FinalShell、Putty等),执行以下命令一键安装(兼容所有主流Linux系统):

# 一键安装 acme.sh(官方推荐命令,自动拉取最新版本)
curl https://get.acme.sh | sh -s email=your@email.com

说明:

# 重新加载环境变量(立即生效,无需重新登录)
source ~/.bashrc

1.2 验证 acme.sh 安装成功

执行以下命令,若输出acme.sh版本信息,则说明安装成功:

# 查看 acme.sh 版本
acme.sh --version

成功输出示例:acme.sh v3.0.7(版本号会随官方更新变化,无需追求最新,稳定即可)。

三、步骤2:申请 Let's Encrypt 免费SSL证书

采用 HTTP-01 验证方式(最简便,无需配置DNS,适合已有Web服务器的场景),申请证书前确保80端口开放,且域名已解析到服务器公网IP。

2.1 一键申请证书(绑定域名)

执行以下命令,替换你的域名(支持单域名、多域名、泛域名,此处以单域名为示例):

# 申请单域名SSL证书(替换为你的域名,如 www.example.com 或 example.com)
acme.sh --issue -d yourdomain.com -d www.yourdomain.com --webroot /usr/share/nginx/html/

2.2 命令参数说明

若未安装Web服务器(无Nginx),可使用 --standalone 参数(acme.sh 会临时启动一个80端口的服务完成验证),命令如下:
acme.sh --issue -d yourdomain.com --standalone

2.3 验证申请成功

执行命令后,若输出 Verify finished, start to signCert success,则说明证书申请成功。

证书默认存储路径(无需手动修改,acme.sh 会管理):~/.acme.sh/yourdomain.com/(包含证书文件、私钥文件)。

常见错误:若申请失败,大概率是以下原因:1. 域名解析未生效(可通过 ping yourdomain.com 验证);2. 80端口被占用或未开放(可通过 netstat -tulpn | grep 80 查看端口状态);3. Web根目录路径错误(确认Nginx配置文件中的根目录)。

四、步骤3:安装SSL证书到Web服务器(Nginx)

证书申请成功后,需将证书安装到Nginx的指定目录,并配置SSL相关参数,才能实现HTTPS访问。

3.1 针对 Nginx 安装并配置SSL证书

(1)一键安装证书到Nginx目录

# 安装SSL证书到Nginx专用目录(自动创建目录,避免误删)
acme.sh --install-cert -d yourdomain.com \
--key-file /etc/nginx/ssl/yourdomain.com.key \
--fullchain-file /etc/nginx/ssl/yourdomain.com.crt \
--reloadcmd "systemctl reload nginx"

(2)命令参数说明

(3)配置 Nginx 支持 HTTPS(修改配置文件)

编辑Nginx站点配置文件(以默认配置文件为例,若有自定义站点配置,修改对应文件即可):

# 编辑 Nginx 配置文件
vim /etc/nginx/nginx.conf

server 块中添加以下SSL配置(替换为你的域名和证书路径):

server {
    listen 443 ssl http2;  # 监听443端口,启用SSL和http2
    server_name yourdomain.com www.yourdomain.com;  # 绑定的域名

    # SSL证书配置(对应上面安装的证书路径)
    ssl_certificate /etc/nginx/ssl/yourdomain.com.crt;
    ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key;

    # SSL优化配置(可选,提升安全性和性能)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 网站根目录(与申请证书时的webroot保持一致)
    root /usr/share/nginx/html;
    index index.html index.php;

    # 其他配置(日志、跳转等)...
}

# 可选:配置 HTTP 自动跳转 HTTPS(80端口重定向到443端口)
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    # 永久重定向到 HTTPS
    return 301 https://$host$request_uri;
}

(4)验证 Nginx 配置并生效

# 验证 Nginx 配置是否有语法错误
nginx -t

# 若输出 "test is successful",重载 Nginx 配置
systemctl reload nginx

五、步骤4:验证 HTTPS 访问是否成功

完成以上配置后,通过浏览器访问你的域名(https://yourdomain.com),若出现以下现象,则说明SSL证书配置成功:

六、步骤5:验证 acme.sh 自动续期功能

acme.sh 安装时已自动创建定时任务(crontab),每日检查证书状态,到期前自动续期并重载Web服务器配置,无需手动操作。

5.1 查看定时任务

# 查看 acme.sh 定时任务
crontab -l

成功输出示例:0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null(每日凌晨0点执行检查)。

5.2 手动测试续期(可选,无需实际等待到期)

# 手动测试证书续期(不会实际续期,仅验证流程是否正常)
acme.sh --renew -d yourdomain.com --dry-run

若输出 Skip, Next renewal time is,则说明续期功能正常,证书会在到期前自动续期。

七、常见问题与解决方案

返回主页