Administrator
发布于 2025-08-04 / 5 阅读
0

基于acme.sh实现免费HTTPS

选择背景

acme.sh 虽然有效期只有3个月 但是 免费&自动续期,有人也推荐certd但是配置视乎麻烦一些

官方仓库及文档:https://github.com/acmesh-official/acme.sh

实现

进入acme.sh=>> github下面 查看官方文档,发现可以通过网络请求直接下载 curl https://get.acme.sh | sh -s email=my@example.com

  1. 但是实际服务器运行 会卡在 下载,我的服务器访问不了外网

  2. 我处于好奇手动复制了https://get.acme.sh用电脑进行访问

    1. 结果出现了一段提示 里面重要的部分是 这段 echo "中国大陆用户请参考:" echo "https://github.com/acmesh-official/acme.sh/wiki/Install-in-China"

    1. 根据提示我们继续访问
      看clone,其实acme已经在中国申请了自己的仓库,所以如果你的服务器访问外网慢 可以使用这种办法
      第一步用国内的gitee拉去
      git clone https://gitee.com/neilpang/acme.sh.git
      第二步 cd 进入到你acme.sh文件按照的位置
      cd acme.sh
      第三步 配置我们的邮箱方便acme发送邮箱提醒(-m 后面接你的邮箱)
      ./acme.sh --install -m my@example.com
      这里我们就按照他的命令 通过gitee 直接国内访问 执行后我这里提示了
      Good, bash is found, so change the shebang to use bash as preferred.

      [Mon Aug 4 11:39:34 AM CST 2025] OK

    2. 通过 acme.sh --list 可以看你申请列表 应该有一个

颁发证书

现在我们的acme.sh脚步已经配置好了

  1. 将我们的域名注册进acme颁发的服务器

ps: 因为刚刚已经按装好了所以服务器可以全局使用acme.sh开头的命令

acme.sh --issue -d lhstudy.cn -d www.lhstudy.cn -w /var/www/html

解释这行命令

acme.sh 固定起手

--issue 顾名思义 发行方也就是指acme官网(因为我们要他们的颁发证书来Https访问,所以就需要注册他们服务)

-d 就是domain 域名 这里-d是可以写多个的,如果是个人用你有其他域名可以只申请一个证书,只需要-d 后面多接几个你的域名

-w 网站根目录 我配置的是nginx 在default配置文件中可以看到 root 后面的配置

颁发结果

他会在我们目录下面生成密钥和证书

  1. 之后官网的建议是把密钥和证书移动到nginx配置文件下面,因为他觉得直接引用密钥是不安全的

acme.sh --install-cert -d lhstudy.cn \
  --key-file /etc/nginx/ssl/lhstudy.cn.key \
  --fullchain-file /etc/nginx/ssl/lhstudy.cn.crt \
  --reloadcmd "systemctl reload nginx"
1. 这里我是为了方便管理在nginx下 创建了一个ssl目录 mkdir ssl 即可 (所以为什么是 /etc/nginx/ssl)
2. --key-file 复制密钥
3. --fulllchain-file 复制证书 nginx要的是crt 所以要把我们的 cer转成crt 
4. 重启nginx

这里绿色表示启动成功了

配置Nginx

  1. 在nginx配置文件中 配置好刚刚在ssl中申请的

自动续签

  1. 默认他会在我们服务器创建一个定时任务
    通过 crontab -l 可以查看 如果要编辑定时任务就是-e

  2. nginx上面图片也配置了一个转发
    因为acme续签会通过这个.well-known/acme-challenge路径下找证书

ps: 第一次做是通过docker容器部署nginx需要挂载 导致稀里糊涂成功了,这一次相对于又装了一边,明白了nginx除了需要root配置根目录外,https证书也需要单独配置就是说,docker容器挂载一个是网站根目录 另一个就是ssl