原文地址求你点进去看,给自己的博客加加热度

https://typecho.hanzhe.site/archives/13.html

acms.sh 是 Github 上开源的一款 SSL 证书申请工具,该工具安装配置完成后可帮我们申请免费 SSL 证书,并通过定时任务实现证书自动续期,理论上配置一次终生实用,官方有提供了中文文档可自行查阅,这里记录下我的操作流程,下列操作均为国内服务器 ubuntu-20.04 免梯完成

首先安装 acme.sh 脚本,根据官方文档可得知执行一行命令即可安装完成,该命令会远程下载 acme.sh 脚本并安装到当前用户的 home 目录下,同时为该脚本创建 alias 别名,所以安装完成后需要刷新一下环境

# 这部分忘了记录日志,仅提供命令参考

# 安装 acme.sh,注意这个邮箱换成自己的邮箱,也可以选择不提供邮箱
$ curl https://get.acme.sh | sh -s email=my@example.com # 刷新环境,使别名生效
$ source ~/.bashrc # 可通过查看版本号检查是否安装成功
$ acme.sh -v
https://github.com/acmesh-official/acme.sh
v3.1.0

接下来需要申请 SSL 证书,根据官方文档介绍申请证书有很多种方法,这里介绍我了解的三种方式:

  • HTTP 方式:检测本机安装的 WEB 服务器,自动在网站根目录下创建文件完成校验域名所有权,支持自动续签,如果没有 WEB 服务器且 80 端口属于空闲状态,脚本还会模拟出一个 WEB 服务器进行响应,由于我的 WEB 环境是 Docker 部署无法检测,且占用了 80 端口,该方案 PASS

  • 自动 DNS:通过域名服务商的 APIKEY 调用接口自动为域名创建解析记录完成校验域名所有权,支持自动续签,可惜我的域名来自西部数码,西部数码仅对代理开放 API 调用权限(想骂街),代理需要预充值(更想骂街),该方案 PASS

  • 手动 DNS:这是我正在使用的方案,在域名提供商手动创建解析记录,脚本校验域名所有权后颁发证书

介绍完成准备干活,按照官方文档的流程走,在命令行输入以下命令

# 我申请的是泛域名证书,所以用 *.hanzhe.site
$ acme.sh --issue --dns -d *.hanzhe.site --yes-I-know-dns-manual-mode-enough-go-ahead-please
[2024年 10月 14日 星期一 11:56:07 CST] Using CA: https://acme.zerossl.com/v2/DV90
[2024年 10月 14日 星期一 11:56:07 CST] Single domain='*.hanzhe.site'
[2024年 10月 14日 星期一 11:56:20 CST] Getting webroot for domain='*.hanzhe.site'
[2024年 10月 14日 星期一 11:56:20 CST] Add the following TXT record:
[2024年 10月 14日 星期一 11:56:20 CST] Domain: '_acme-challenge.hanzhe.site'
[2024年 10月 14日 星期一 11:56:20 CST] TXT value: 'G2kdxbaqrhza92njOTS5Rm9Tm_BLXsJLQAjm5luF63A'
[2024年 10月 14日 星期一 11:56:20 CST] Please make sure to prepend '_acme-challenge.' to your domain
[2024年 10月 14日 星期一 11:56:20 CST] so that the resulting subdomain is: _acme-challenge.hanzhe.site
[2024年 10月 14日 星期一 11:56:20 CST] Please add the TXT records to the domains, and re-run with --renew.
[2024年 10月 14日 星期一 11:56:20 CST] Please add '--debug' or '--log' to see more information.
[2024年 10月 14日 星期一 11:56:20 CST] See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh

根据日志可以看出申请的是 ZeroSSL 的证书,需要添加TXT类型的_acme-challenge解析记录,记录值在日志中也能看到,打开域名提供商管理地址,添加对应的解析记录

这里稍等片刻,确保解析生效后按照官方文档的流程继续走,校验域名所有权并生成证书

[2024年 10月 14日 星期一 12:07:37 CST] The domain '*.hanzhe.site' seems to already have an ECC cert, let's use it.
[2024年 10月 14日 星期一 12:07:37 CST] Renewing: '*.hanzhe.site'
[2024年 10月 14日 星期一 12:07:37 CST] Renewing using Le_API=https://acme.zerossl.com/v2/DV90
[2024年 10月 14日 星期一 12:07:40 CST] Using CA: https://acme.zerossl.com/v2/DV90
[2024年 10月 14日 星期一 12:07:40 CST] Single domain='*.hanzhe.site'
[2024年 10月 14日 星期一 12:07:41 CST] Verifying: *.hanzhe.site
[2024年 10月 14日 星期一 12:07:48 CST] Processing. The CA is processing your order, please wait. (1/30)
[2024年 10月 14日 星期一 12:07:53 CST] Success
[2024年 10月 14日 星期一 12:07:53 CST] Verification finished, beginning signing.
[2024年 10月 14日 星期一 12:07:53 CST] Let's finalize the order.
[2024年 10月 14日 星期一 12:07:53 CST] Le_OrderFinalize='https://acme.zerossl.com/v2/DV90/order/***/finalize'
[2024年 10月 14日 星期一 12:07:56 CST] Order status is 'processing', let's sleep and retry.
[2024年 10月 14日 星期一 12:07:56 CST] Sleeping for 15 seconds then retrying
[2024年 10月 14日 星期一 12:08:12 CST] Polling order status: https://acme.zerossl.com/v2/DV90/order/***
[2024年 10月 14日 星期一 12:08:14 CST] Downloading cert.
[2024年 10月 14日 星期一 12:08:14 CST] Le_LinkCert='https://acme.zerossl.com/v2/DV90/cert/***'
[2024年 10月 14日 星期一 12:08:17 CST] Cert success.
-----BEGIN CERTIFICATE-----
这里不能给你们看~
-----END CERTIFICATE-----
[2024年 10月 14日 星期一 12:08:17 CST] Your cert is in: /root/.acme.sh/*.hanzhe.site_ecc/*.hanzhe.site.cer
[2024年 10月 14日 星期一 12:08:17 CST] Your cert key is in: /root/.acme.sh/*.hanzhe.site_ecc/*.hanzhe.site.key
[2024年 10月 14日 星期一 12:08:17 CST] The intermediate CA cert is in: /root/.acme.sh/*.hanzhe.site_ecc/ca.cer
[2024年 10月 14日 星期一 12:08:17 CST] And the full-chain cert is in: /root/.acme.sh/*.hanzhe.site_ecc/fullchain.cer

如果域名所有权校验失败就等几分钟在执行一次,一切顺利的话 SSL 证书已经申请完成了,根据日志可知证书文件在用户目录下,不过官方不建议直接将文件复制过去,建议通过脚本提供的命令将证书安装到指定目录

# 将证书文件安装到指定目录
$ acme.sh --install-cert -d *.hanzhe.site \
--key-file /opt/docker/nginx/data/ssl/site.hanzhe/key.pem \
--fullchain-file /opt/docker/nginx/data/ssl/site.hanzhe/cert.pem \

证书准备就绪,如果你的 WEB 服务器已经配置好了证书直接重启就行了,我这里使用的是 NGINX WEB 服务器:

server {
listen 443 ssl;
server_name hanzhe.site www.hanzhe.site;
ssl_certificate /data/ssl/site.hanzhe/cert.pem; # SSL证书配置
ssl_certificate_key /data/ssl/site.hanzhe/key.pem; # SSL证书配置
location / {
root /usr/share/nginx/www;
index index.html index.htm index.php;
}
}

配置完成后使用docker compose restart ngixn重启 WEB 服务器即可

题外话:我的服务器环境不支持自动续期,发现颁发者为 ZeroSSL 之后本打算自己去申请来着,结果发现 ZeroSSL 的泛域名证书需要注册登录后购买高级订阅,是收费的,这个脚本可以免登录直接帮我申请到手,感谢感谢

使用 acme.sh 生成免费 90 天的 SSL 泛域名证书的更多相关文章

  1. 基于Let's Encrypt生成免费证书-支持多域名泛域名证书

    目录 客户端 certbot acme.sh 安装acme.sh 1. 自动安装 2. 手动安装 3. 测试收否安装成功 使用acme.sh生成证书 1. HTTP 方式 2. DNS 方式 1. 生 ...

  2. acme.sh建立SAN证书 和泛域名证书

    文件来源 https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert domain=$domain time=`date +%Y%m%d% ...

  3. Let's Encrypt免费泛域名证书申请

    一. 下载acme.sh,以下四条命令任选一条即可 curl https://get.acme.sh | shwget -O - https://get.acme.sh | sh curl https ...

  4. CentOS 7配置Let’s Encrypt支持免费泛域名证书

    Let’s Encrypt从2018年开始支持泛域名证书,有效期3个月,目前仅支持acme方式申请,暂不支持certbot. 1.安装acme.sh curl https://get.acme.sh ...

  5. let's encrypt部署免费泛域名证书

    环境说明 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@localhos ...

  6. 使用acme.sh从Let's Encrypt申请SSL证书

    Let's Encrypt 简介 Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为 ...

  7. 使用 acme.sh 签发续签 Let‘s Encrypt 证书 泛域名证书

    1. 安装 acme.sh 安装很简单, 一个命令: curl https://get.acme.sh | sh 并创建 一个 bash 的 alias, 方便你的使用 alias acme.sh=~ ...

  8. 永久免费泛域名证书: letsencrypt 

    项目地址: https://github.com/Neilpang/acme.sh

  9. 使用acme.sh自动申请、续期、部署免费的SSL证书

    参考文档:https://github.com/acmesh-official/acme.sh 一个使用纯shell操作的免费SSL证书申请部署工具. 免费的SSL证书由以下CA机构提供: ZeroS ...

  10. 使用acme.sh申请&自动续期LetsEncrypt免费SSL证书(转)

    一.简介 LetsEncrypt是一个免费.自动.开放的证书颁发机构.acme.sh 实现了 acme 协议, 可以从 LetsEncrypt 生成免费的证书. 本文介绍如何使用acme.sh来签发并 ...

随机推荐

  1. douyin 今日头条 巨量登录滑块和douyin详情滑块分析

    声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容.敏感网址.数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均 ...

  2. 使用 Alba 对 AspnetCore项目进行测试

    前言 在AspnetCore生态系统中,我们测试项目一般使用Microsoft.AspNetCore.TestHost的TestServer 到.NET6后提供的Microsoft.AspNetCor ...

  3. Ubuntu 18.04.4 导入docker镜像,启动镜像,保存容器为镜像,导出镜像

    1.  查看  docker 版本 sudo docker version 2. 查看本地库中的镜像 sudo docker images 3.   查看  正在运行的  容器 sudo docker ...

  4. 经典视频分享:Machine Learning: A New ICE (Identification, Control, Estimation) Age ? —— 自动控制和人工智能的结合前景

    机器学习作为近几年兴起的学科,虽然他诞生的时间已经而久远了,但是真正走进人们视野也就是这几年的事情. 机器学习领域本身只有强化学习这个分支和控制类是天然关联的,因此近几年国内的知名高校的强化学习研究者 ...

  5. [POI2015] POD 题解

    前言 题目链接:洛谷. 题意简述 长度为 \(n\) 的一串项链,每颗珠子是 \(k\) 种颜色之一.第 \(i\) 颗与第 \(i-1, i+1\) 颗珠子相邻,第 \(n\) 颗与第 \(1\) ...

  6. 同一块石头搬到了两次的List<Map> 转List<dto>的问题

    不多比比 it is shame to talking about this List<Map<String, Object>> maps = reader.readAll() ...

  7. Java学习笔记2--JDK的安装和配置

    一.进入oracle官网,下载jdk oracle官网:Oracle | Cloud Applications and Cloud Platform ps:不同的浏览器,可能进入oracle官网,会只 ...

  8. Wetab新标签页:内置实用小组件的浏览器扩展,重新定义浏览器主页

    除了社交媒体,浏览器可能是我们日常工作.学习和生活中最常用的平台之一.然而,在使用浏览器的过程中,我们经常被书签管理.标签管理等问题所困扰.例如,书签栏混乱不堪,无法快速查找到所需书签. 为了和浏览器 ...

  9. 使用一次sql请求,返回分页数据和总条数

    日常搬砖,总少不了需要获取分页数据和总行数. 一直以来的实践是编码两次sql请求,分别拉分页数据和totolCount. 最近我在思考: 常规实践为什么不是 在一次sql请求中中执行多次sql查询或多 ...

  10. 屏蔽RaiDrive的广告

    RaiDrive 广告域名:ads.raidrive.com 在 HOSTS 添加 127.0.0.1 ads.raidrive.com 或者在代理中设置为阻止即可. 效果: 补 最新版(2023.9 ...