Dongxing's Wiki Dongxing's Wiki
首页
  • 剑指 Offer
  • LeetCode
  • 算法与数据结构
  • Python 语言
  • Web 开发
  • Hive
  • Elastic Search
  • 机器学习
  • NLP
  • 检索技术
  • 数据分析
  • 经验笔记
  • Linux 配置
  • 博客进化记
  • 杂谈
GitHub (opens new window)
首页
  • 剑指 Offer
  • LeetCode
  • 算法与数据结构
  • Python 语言
  • Web 开发
  • Hive
  • Elastic Search
  • 机器学习
  • NLP
  • 检索技术
  • 数据分析
  • 经验笔记
  • Linux 配置
  • 博客进化记
  • 杂谈
GitHub (opens new window)
  • 经验笔记

    • Git 常用命令速查
    • Let's Encrypt 免费泛域名通配符证书申请
      • 1) 安装脚本
      • 2)生成证书
        • 配置 DNS API 自动验证
        • 切换签发机构到 Let's Encrypt
        • 申请证书
      • 3)证书拷贝到 Nginx
      • 4)配置 nginx 使用证书
      • 5) 配置 acme.sh 自动更新
    • 在Vmware虚拟机上搭建Hadoop+Spark集群
    • iTerm2 配置 ssh 记住密码一键登录
    • 使用frp进行内网穿透
    • macOS 上的常用环境配置笔记
    • 使用 kutt.tt 自建短网址服务
    • 在Ubuntu上自建NextCloud
    • 换路由器后连接不上本地 NAS
  • 经验笔记
  • 经验笔记
anthony
2021-08-28
目录

Let's Encrypt 免费泛域名通配符证书申请

最近想要给网站整一个通配符证书,不然每加一个子域名,都要手动去申请一个域名证书,一年有效期过后还要重新申请和更新,非常不方便。某里云和某讯云的通配符证书申请,都是需要缴纳蛮贵的费用的,对个人开发者来说实在没有必要。好在 Let's Encrypt 提供了免费的通配符证书,虽然有效期只有2-3个月,但是通过脚本配置,可以实现自动循环更新,节省了大量和申请、更新证书有关的烦恼。

今天梳理一下使用一个第三方脚本 acme.sh 来进行证书申请和更新的过程。相关操作也可以参照 https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E (opens new window)

# 1) 安装脚本

可以到 acme.sh 的 Github 主页 https://github.com/acmesh-official/acme.sh (opens new window),按流程进行脚本安装。

curl https://get.acme.sh | sh -s [email protected]
1

邮箱替换成自己的邮箱。

安装之后需要重开一下终端,才能使用 acme.sh 命令。或者就直接到你自己的 ~/.acme.sh/ 目录下,每次命令使用 ./acme.sh xxxxxxx 也可以。

# 2)生成证书

# 配置 DNS API 自动验证

签发证书需要验证你对这个域名的所有权。一种方式是可以通过 http 验证,也就是你在网站根目录下放置一个独有的文件,如果通过网址能访问到这个文件,则说明域名确实归你所有。这种方式需要你的域名解析到服务器上。

另一种方式是通过 DNS 解析记录来验证。可以手动给域名按要求添加 DNS 解析记录,但之后无法自动更新。所以这里建议通过 Automantic DNS API 来做,脚本可以自动帮你添加和删除 DNS 解析记录,用来完成验证,并且之后可以自动更新证书。

目前 acme.sh 支持多家域名解析商的自动验证,套路和良心云的也都支持. 以我用的良心云为例,在 DNSPOD 里面生成一对 API 的 Id 和 Key,记下来,然后在命令行将对应的内容 export 出来。一次使用后,acme.sh 会将这两个字符串记录下来,之后不需要反复输入了。

export DP_Id="1234567"
export DP_Key="dagdagdgasgsajdgsdgsag"
1
2

如果你用的其他家解析,对应的变量名请参照 https://github.com/acmesh-official/acme.sh/wiki/dnsapi (opens new window)。

# 切换签发机构到 Let's Encrypt

这是因为从 21 年 8 月起,默认的 CA 变成了 ZeroSSL,这个可以根据个人情况,有需要的话可以换回 Let's Encrypt。

acme.sh --set-default-ca --server letsencrypt
1

# 申请证书

按上面的步骤,完成对 DNS API key 的 export 之后,可以运行命令申请证书了。这里我申请一个通配符证书。

acme.sh --issue --dns dns_dp -d yourdomain.com -d *.yourdomain.com 
1

如果一切顺利,几分钟后就可以完成整个脚本,提示你证书保存在 acme.sh 默认目录下了。

使用命令 acme.sh --list 可以查看当前拥有的证书。

我在使用时遇到一个报错的问题:

Error: CAA record for yourdomain.com prevents issuance
1

有可能是因为域名解析的设置导致的,我删掉了自己根域名的 CNAME 记录之后,再次申请就恢复正常了。

# 3)证书拷贝到 Nginx

这是额外的步骤,上一步之后证书就已经申请完成了。这里以 Nginx 为例,记录一下怎么将证书配置到服务器。

acme.sh --install-cert -d yourdomain.com \
--key-file /etc/nginx/cert/key.pem \
--fullchain-file /etc/nginx/cert/cert.pem \
--reloadcmd "service nginx force-reload"
1
2
3
4

上面替换成自己的域名。nginx 的目录也要根据自己的情况来替换,一般默认装在 /etc/nginx/ ,但是没有 cert 目录,自己可以建一个文件夹专门存放证书。

执行一次操作之后,这些目录也会被记录下来,acme.sh 从安装之后已经自动创建了一个定时任务,每天会执行脚本,检查有没有快过期的证书,并自动完成重新申请和重新拷贝部署。

# 4)配置 nginx 使用证书

这也是额外的步骤。在 nginx 的配置文件里相应修改,让 https 请求使用这些证书。例如,简单配置静态文件托管:

server {
	listen 443;
	server_name example.com;
  	ssl on;
	ssl_certificate /etc/nginx/cert/cert.pem;
	ssl_certificate_key /etc/nginx/cert/key.pem;

	location / {
		root /home/web/;
	}
}
1
2
3
4
5
6
7
8
9
10
11

配置完成后重启 nginx,刷新网站,发现证书应用成功啦。

# 5) 配置 acme.sh 自动更新

因为 CA 的证书申请接口可能会更新,所以可以开启 acme.sh 的自动更新功能,及时获取 acme.sh 的最新版本。

acme.sh  --upgrade  --auto-upgrade
1
上次更新: 2022/11/11, 2:11:00
Git 常用命令速查
在Vmware虚拟机上搭建Hadoop+Spark集群

← Git 常用命令速查 在Vmware虚拟机上搭建Hadoop+Spark集群→

Theme by Vdoing | Copyright © 2017-2023 anthony 京ICP备17072417-3
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式