Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >通过acme.sh开源工具申请泛解析SSL证书

通过acme.sh开源工具申请泛解析SSL证书

原创
作者头像
星哥玩云
修改于 2025-03-31 07:44:59
修改于 2025-03-31 07:44:59
12300
代码可运行
举报
运行总次数:0
代码可运行

通过acme.sh开源工具申请泛解析SSL证书

前期准备

1.域名

2.Linux云服务器(本文系统某讯云的Centos7),测试公网IP为:150.158.130.33

3.域名服务商的API Token,或者域名解析到申请SSL云服务器IP(实验项目: ssl.xgss.net)

安装acme.sh

普通用户和 root 用户都可以安装使用. 安装过程进行了以下几步:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# yum install socat -y
​
# curl https://get.acme.sh | sh
# curl https://get.acme.sh | sh -s email=my@example.com(zerossl.com注册的邮箱账号,在浏览器登录ZeroSSL之后可以看到证书)
​
# 或者
# wget -O- https://get.acme.sh | sh

国内的服务器下载github可能会比较慢,如果下载失败,可以多执行几次。

1、把 acme.sh 安装到你的 home 目录下:~/.acme.sh/ 装过程不会污染已有的系统任何功能和文件, 所有的修改都限制在安装目录中: ~/.acme.sh/

2、并创建 一个 bash 的 alias, 方便你的使用: alias acme.sh=~/.acme.sh/acme.sh

3、自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.

把 acme.sh 安装到你的 home 目录下:~/.acme.sh/并创建 一个 bash 的 alias, 方便你的使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alias acme.sh=~/.acme.sh/acme.sh
echo 'alias acme.sh=~/.acme.sh/acme.sh' >>/etc/profile

常用命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
acme.sh --help     #获取帮助
acme.sh --version  # 查看版本
​

关联 ZeroSSL

目前 acme.sh 支持四个正式环境 CA,分别是 Let’s Encrypt、Buypass、ZeroSSL 和 SSL.com,默认使用 ZeroSSL,所以我们不用切换。如果不放心,可以设置一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
acme.sh --set-default-ca --server zerossl

生成证书

acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: HTTP 和 DNS 验证。

如果有条件建议使用DNS验证,

HTTP认证

此方法好像不支持域名的泛解析,笔者想泛解析做泛域名的认证,但一直不成功,不知道什么原因。

域名解析

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ssl.xgss.net A记录解析到 150.158.130.33
只解析上面一条即可,因为只是为 ssl.xgss.net 申请证书,后面的解析是为了实验能否申请到多*.xgss.net的证书
xgss.net A记录解析到 150.158.130.33
*.xgss.net A记录解析到 150.158.130.33

配置http站点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# mkdir -p /data/wwwroot/web/ssl.xgss.net/
# echo 'hello SSL'> /data/wwwroot/web/ssl.xgss.net/index.html
配置nginx站点
server {
  listen       80;
  access_log /dev/null;
  error_log /dev/null;
  server_name  ssl.xgss.net xgss.net;
  root /data/wwwroot/web/ssl.xgss.net/;
  location / {
                index  index.html index.htm index.php;
        }
}

验证是否配置正常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# curl http://ssl.xgss.net/
hello SSL

http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
acme.sh  --issue  -d mydomain.com -d www.mydomain.com  --webroot  /home/wwwroot/mydomain.com/

只需要指定域名, 并指定域名所在的网站根目录. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何副作用.

如果你用的 nginx服务器, 或者反代, acme.sh 还可以智能的从 nginx的配置中自动完成验证, 你不需要指定网站根目录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
acme.sh --issue  -d mydomain.com   --nginx

注意, 无论是 apache 还是 nginx 模式, acme.sh在完成验证之后, 会恢复到之前的状态, 都不会私自更改你本身的配置. 好处是你不用担心配置被搞坏, 也有一个缺点, 你需要自己配置 ssl 的配置, 否则只能成功生成证书, 你的网站还是无法访问https. 但是为了安全, 你还是自己手动改配置吧.

如果你还没有运行任何 web 服务, 80 端口是空闲的, 那么 acme.sh 还能假装自己是一个webserver, 临时听在80 端口, 完成验证:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
acme.sh  --issue -d mydomain.com   --standalone

app点zerossl点com/signup 使用邮箱注册一个账号,假设账号的邮箱为:"XXXX#163.com"

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# /root/.acme.sh/acme.sh --register-account -m XXXX@163.com
[Mon Jun 27 13:37:27 CST 2022] No EAB credentials found for ZeroSSL, let's get one
[Mon Jun 27 13:37:30 CST 2022] Registering account: https://acme.zerossl.com/v2/DV90
[Mon Jun 27 13:37:38 CST 2022] Registered
[Mon Jun 27 13:37:38 CST 2022] ACCOUNT_THUMBPRINT='*********************'

申请证书

将证书放到一个指定的目录,scrm用nginx配置,本例是指定在/data/wwwroot/web/ssl目录下

1.创建ssl存放目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p /data/wwwroot/web/ssl

2.申请SSL证书

申请单域名证书,并且指定证书存放的目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# /root/.acme.sh/acme.sh  --issue -d ssl.xgss.net  --webroot  /data/wwwroot/web/ssl.xgss.net/ \
--keypath       /data/wwwroot/web/ssl/ssl.xgss.net.key  \
--fullchainpath /data/wwwroot/web/ssl/ssl.xgss.net.key.pem \
--reloadcmd "/usr/local/openresty/nginx/sbin/nginx -s reload"

--reloadcmd 表示复制完成后重启服务器的命令,根据自己服务器状况填写。

/data/wwwroot/web/ssl/ 需要自己建立好,如果文件夹不存在,会报错。

3.生成dhparam文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
openssl dhparam -out /data/wwwroot/web/ssl/dhparam.pem     2048         

4.配置ssl.xgss.net的nginx配置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  server {
        listen 443 ssl;
        access_log /dev/null;
        error_log /dev/null;
        server_name  ssl.xgss.net;
        root /data/wwwroot/web/ssl.xgss.net/ ;
        
        ssl_certificate     /data/wwwroot/web/ssl/ssl.xgss.net.key.pem;
        ssl_certificate_key /data/wwwroot/web/ssl/ssl.xgss.net.key;
​
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /data/wwwroot/web/ssl/dhparam.pem;
        
        location / {
            index  index.html index.htm index.php;
        }
     }

浏览器访问: https://ssl.xgss.net

证书信息

ZeroSSL官网证书截图

DNS认证

手动DNS方式

手动在域名上添加一条 txt 解析记录, 验证域名所有权。

这种方式的好处是, 你不需要任何服务器, 不需要任何公网 ip, 只需要 dns 的解析记录即可完成验证. 坏处是,如果不同时配置 Automatic DNS API,使用这种方式 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
acme.sh  --issue  --dns   -d mydomain.com \
 --yes-I-know-dns-manual-mode-enough-go-ahead-please

然后, acme.sh 会生成相应的解析记录显示出来, 你只需要在你的域名管理面板中添加这条 txt 记录即可.

等待解析完成之后, 重新生成证书:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
acme.sh  --renew   -d mydomain.com \
  --yes-I-know-dns-manual-mode-enough-go-ahead-please

注意第二次这里用的是 --renew

自动DNS方式

dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证.

由于acme.sh对域名解析/提供商的支持十分广泛,所以请针对自己所在的域名提供商获取对应的API Token,目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成.

支持列表: https://github.com/acmesh-official/acme.sh/wiki/dnsapi

国内目前使用较多的是某讯云和某里云,获取API Token的方法分别是:

  • 某讯云的DNSPod 登录DNSPod,进入顶部导航栏里的用户中心,在左侧的导航栏里,找到安全设置,看到页面的最下面,有个API Token.点击查看->创建API Token->填写Tokens名称,复制好ID与Token即可.保存待用。
  • 某里云域名 需要登录到某里云官网获取Ali_Key和Ali_Secret。点击此处跳转 | https://usercenter.console.aliyun.com/#/manage/ak 当然可以直接使用accessKey

某里云API Token申请

申请子账户来申请。

详细就不列举了,有疑问可以后台提交工单。

申请泛解析域名证书

获取到对应的API Token之后我们需要将id和key设置为环境变量,供acme.sh调用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# DNSPod
export DP_Id="你的 API ID"
export DP_Key="你的 Token"
​
# aliyun
export Ali_Key="你的 AccessKey ID"
export Ali_Secret="你的 AccessKey Secret"

临时环境变量只需配置这一次即可,当成功申请证书后,API 信息会被自动保存在~/.acme.sh/account.conf里,下次你使用acme.sh的时候系统会自动读取并使用。

腾讯云DNSpod:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
acme.sh --issue -d example.com -d *.example.com --dns dns_dp

某云:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
acme.sh --issue  -d example.com -d *.example.com --dns dns_ali
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
acme.sh --issue  -d xgss.net -d *.xgss.net --dns dns_ali \
--keypath       /data/wwwroot/web/ssl/all.xgss.net.key  \
--fullchainpath /data/wwwroot/web/ssl/all.xgss.net.key.pem \
--reloadcmd "/usr/local/openresty/nginx/sbin/nginx -s reload"
​
openssl dhparam -out /data/wwwroot/web/ssl/dhparam.pem     2048      
​
# ll /data/wwwroot/web/ssl
total 16
-rw------- 1 root root 1679 Jun 27 19:02 all.xgss.net.key
-rw-r--r-- 1 root root 6684 Jun 27 19:02 all.xgss.net.key.pem
-rw-r--r-- 1 root root  424 Jun 27 19:03 dhparam.pem

(一个小提醒, 这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload)

你的KEY和Secret都将明文保存‘~/.acme.sh/account.conf’文件中,注意保护隐私。

域名后台新增了两条记录

验证SSL

浏览器打开网址,点击地址的小锁图标,可以查看更多信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# curl https://ssl2.xgss.net/
hello SSL
[root@shanghai-node02 ssl]# curl https://ssl3.xgss.net/
hello SSL
[root@shanghai-node02 ssl]# curl https://ssl4.xgss.net/
hello SSL

定时更新证书

安装过程中会自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
00 00 * * * root /root/.acme.sh/acme.sh --cron --home /root/.acme.sh &>/var/log/acme.sh.logs

查看已安装证书的信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
acme.sh --info -d xgss.net

更新证书

目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心.

请确保 cronjob 正确安装, 看起来是类似这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
crontab  -l
​
56 * * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

更新acme.sh

目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.

升级 acme.sh 到最新版

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
acme.sh --upgrade

如果你不想手动升级, 可以开启自动升级:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
acme.sh  --upgrade  --auto-upgrade

之后, acme.sh 就会自动保持更新了.

你也可以随时关闭自动更新:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
acme.sh --upgrade  --auto-upgrade  0

参考

官方中文说明: https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
双十一活动购腾讯云轻量云免费申请ssl证书,给你的应用加一道安全锁
之前介绍了《腾讯云轻量应用服务器部署私有笔记》,https://cloud.tencent.com/developer/article/2466047 搭建了自己的私有笔记系统,但是没有申请ssl证书,没有SSL证书的网站数据传输不被加密,这使得登录凭证、个人信息、支付详情等敏感信息容易被第三方拦截和窃取,增加了数据泄露的风险。
星哥玩云
2024/11/19
2920
双十一活动购腾讯云轻量云免费申请ssl证书,给你的应用加一道安全锁
acme申请ssl证书
acme安装的时候就会自动添加crond计划任务来处理续约,当然也是可以手动来renew的。
行 者
2024/03/11
4960
正确使用 acme.sh, 让你的网站永久使用 ssl 证书,It's free!
acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.
用户1418987
2023/12/06
10.4K1
正确使用 acme.sh, 让你的网站永久使用 ssl 证书,It's free!
acme.sh生成自动续费的免费SSL证书
acme.sh 实现了 acme 协议,可以从 letsencrypt 生成免费的证书。 一个完全用Shell(Unix shell)语言编写的ACME协议客户端,支持ACME v1和ACME v2,只需一个脚本即可生成发布,续订和自动安装SSL证书。
骤雨重山
2022/01/17
2.3K0
40.9k star,acme.sh,ssl证书替换神器
假设你搞了博客,服务器买好了,域名买好了,服务开发好了,然后发现还需要证书,而且免费的3个月就要换?
大侠之运维
2025/01/23
1920
TLS 以及自动更新证书: Let's encrypt + acme.sh
Mr. Hsu edited this page on 18 Jun · 24 revisions
OwenZhang
2021/12/08
1.6K0
【玩转Lighthouse】Acme申请SSL证书
在安装ACME之前我们先更新一下环境并安装socat,请根据服务器linux版本选择命令。
liu-li
2022/05/13
2.1K0
【玩转Lighthouse】Acme申请SSL证书
Linux下使用acme.sh申请和管理Let’s Encrypt证书
今天的互联网暗潮涌动,陷阱无数,HTTPS 可以帮助你抵御部分陷阱。然而 HTTPS 的生态系统严重依赖于 CA,而 CA 有着多个令人诟病的问题:证书昂贵;不透明;安全问题严重,比如被入侵签发假证书或错误签发了被用于中间人攻击的证书。证书透明Certificate Transparency 政策和 Let’s Encrypt 的出现对 HTTPS 生态系统产生了革命性的影响。Let's Encrypt 旨在普及 HTTPS,证书免费配置自动,它如今一天要签发 5.5 万个证书。 今天我们就先从“申请获取免
沈唁
2018/05/24
4.2K0
利用 acme.sh 申请 ZeroSSL 泛域名证书的图文教程
熟悉陌涛的都知道,陌涛一直都在使用 acme.sh 作为服务器端申请、部署、续期免费 SSL 证书的主要工具,今天在帮一个站长申请 SSL 证书的时候发现 acme.sh v3.0 开始默认的免费 SSL 证书变更为:ZeroSSL 了,这个 ZeroSSL 其实跟陌涛一直用的 Let's Encrypt 类似,在 2016 年就已经推出,和 Let's Encrypt 一样,证书有效期只有 90 天,支持泛域名 SSL 证书。和 Let's Encrypt 不同的是,ZeroSSL API 没有速率限制,不存在同一 IP 多次申请 SSL 证书被限制的问题,ZeroSSL 还提供了 WEB 界面可在后台管理 SSL 证书,相比 Let's Encrypt 功能更加丰富。
陌涛
2022/05/03
11K1
利用 acme.sh 申请 ZeroSSL 泛域名证书的图文教程
使用 acme.sh 自动申请并更新泛域名证书
在互联网快速发展的今天,网站安全愈发重要,而 SSL/TLS 证书成为了保护网站数据的基础。对于管理多个子域的用户来说,泛域名证书(Wildcard Certificate)是一种高效便捷的选择。
沈唁
2024/11/03
6540
使用 acme.sh 自动申请并更新泛域名证书
利用 acme.sh 申请 ZeroSSL 泛域名证书的图文教程
今天跟彧繎聊天时发现他的站使用的也是泛域名证书而且是一年了,问了他才知道是收费的,当然并不贵,只是我没有admin开启的邮箱也就是admin#talklee.com,所以无法申请,恰巧看到明月登楼博主的博客也是SSL证书就咨询了以下,发现他的是zerossl的证书,当然跟青云的一样有效期三个月,但是zerossl可以通过acme.sh实现自动续费,目前acme泛域名貌似仅仅命令形式申请,在官网上申请的时候需要一些费用才行。
李洋博客
2022/04/26
2.9K0
利用 acme.sh 申请 ZeroSSL 泛域名证书的图文教程
使用 acme.sh 申请 SSL 证书
在申请 ssl 时,大部分平台都会存在或多或少的限制,比如国内平台的 亚洲诚信 ,该平台可以一次性申请双域名有效期为一年的证书,或者短期的通配符证书
阿龙w
2023/10/23
1.7K0
acme从letsencrypt 生成免费通配符/泛域名SSL证书并自动续期
原来的ssl证书都是lnmp一键申请的,后来因为80端口问题,只能从运营商那边申请一年的,但是 都是单域名的没有泛域名的。其实已经知道有服务商早就推出免费的泛域名但是一直没有去了解,习惯真的很可怕,废话不多说  其实官方已经有比较详细的文档 按照官方的直接来就行了
pooky
2020/10/30
9.6K0
acme从letsencrypt 生成免费通配符/泛域名SSL证书并自动续期
原 签发HTTPS证书 (acme.sh)
原来写过一篇文章《记录两个免费HTTPS服务商》里面记录了三个免费的证书提供商。 其中沃通的证书好像已经不能用了,不过最近的一年中:阿里云,腾讯云,百度云等都接入了国外的某家证书提供商,以提供免费的证书服务。 通过国内的云服务商提供的证书服务,大都有一年到两年的服务期限,这类操作大多为中文界面,切流程简单,就不做过多说明,本篇文章主要对:开源的letsencrypt证书申请作简要的记录。 letsencrypt 是一个开源的免费证书服务,由国际很多知名厂商共同提倡组建的一个组织,其主页上提供了这些厂商
霡霂
2018/06/04
2.6K0
告别焦虑:使用 acme 实现 ssl 免费证书到期自动更新
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
Lorin 洛林
2024/08/09
3.2K0
利用acme.sh快速获取SSL证书 - wuuconix's blog
之前我的wuuconix.link和wuuconix.xyz域名的SSL证书都是通过 来此加密 - Let’s Encrypt 在线免费申请SSL证书 (osfipin.com) 申请的,它是一个网页端的SSL证书申请工具。
wuuconix
2023/03/16
2.1K0
利用acme.sh快速获取SSL证书 - wuuconix's blog
ACME通过dns验证申请Let’s Encrypt免费ssl证书
这么多年来我还是第一次用Let’s Encrypt的证书呢,以前买过2年,后面就一直在腾讯云和阿里云申请免费的ssl证书。
速企云
2024/03/02
2.2K0
ACME通过dns验证申请Let’s Encrypt免费ssl证书
acme.sh 申请 ZeroSSL 泛域名证书
原本用的阿里腾讯免费ssl 发现过期更新起来比较麻烦 于是就折腾使用acme.sh 自动申请泛域名ssl ZeroSSL。
傲绝
2023/03/27
2.7K0
acme.sh-实现自动化部署SSL证书
我一直使用的都是Let's Encrypt免费的证书,昨天看到群里的大佬发出了一个测试的证书申请的脚本命令,我才接触到acme.sh,于是我查阅了很多大佬的博文了解这个脚本的使用方法。acme.sh功能非常强大,自动安装证书,支持广泛的环境和场景的部署。
樱次元
2022/07/23
6.4K7
acme.sh-实现自动化部署SSL证书
使用acme.sh申请Let's Encrypt免费的SSL证书
acme.sh 实现了 acme 协议,可以从letsencrypt生成免费的证书。接下来将为大家介绍怎样申请Let's Encrypt通配符证书。
青阳
2021/09/15
5.8K4
相关推荐
双十一活动购腾讯云轻量云免费申请ssl证书,给你的应用加一道安全锁
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验