Let‘s Encrypt SSL 免费自签域名泛域名证书申请和配置

  1. 安装 acme.sh
    安装过程需要服务器已安装 socat 模块,它是一个多功能的网络小工具。
dnf install socat -y

通过下面命令安装 acme.sh ,Email 用来接收重要重要通知,如证书快到期未更新会收到通知。

curl https://get.acme.sh | sh -s email=自己的邮箱

执行命令后几秒就安装好了,如果半天没有反应请 Ctrl+C 后重新执行命令。acme.sh 安装在 ~/.acme.sh 目录下,并自动创建了一个 cronjob,每天 0:00 点自动检测所有的证书,如果快过期了, 则会自动更新。

  1. 生成证书
    acme.sh 实现了 acme 协议支持的所有验证协议,一般有三种验证方式:HTTP 方式、手动 DNS 方式和 DNS API 方式。推荐使用 DNS API 方式。

HTTP 方式

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

acme.sh --issue -d example.com(域名) --webroot /path/to/example.com/

acme.sh 会自动的生成验证文件,并放到网站的根目录,然后自动完成验证,最后会自动删除验证文件。

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

acme.sh --issue -d example.com --nginx

注意,HTTP 验证方式不支持生成泛域名证书。

手动 DNS 方式

这种方式需要手动在域名上添加一条 TXT 解析记录,验证域名所有权。这种方式的好处是, 你不需要任何服务器,不需要任何公网 IP,只需要 DNS 的解析记录即可完成验证。

执行以下命令进行手动 DNS 验证:

acme.sh --issue -d example.com -d "*.example.com" --dns \
--yes-I-know-dns-manual-mode-enough-go-ahead-please

到 DNS 解析中,新增一条 TXT 记录,域名前缀为 _acme-challenge,记录值为终端输出的 TXT value 的值。然后再次执行:

acme.sh --renew -d example.com -d "*.example.com" \
--yes-I-know-dns-manual-mode-enough-go-ahead-please

注意:这种方式的坏处是,如果不同时配置 DNS API,将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。

webroot方式(推荐方式)
创建验证目录

mkdir -p /usr/local/nginx/html/acme/example.com/.well-known
echo "example.com" > /usr/local/nginx/html/acme/example.com/.well-known/test.html

webroot方式生成证书需要在对应服务80端口下配置需指定root目录和.well-known,具体代码如下:
root 目录也可以指定到项目下(比如web项目)

root index.html;
location /.well-known/ {
	root html/acme/example.com/;
} 

执行命令重新加载nginx配置文件

nginx  -t
nginx  -s reload

测试访问连接 此处有问题可以看一下解析,必须到外网,查看返回结果如果上上述中echo “example.com” > /usr/local/nginx/html/acme/example.com/.well-known/test.html中的内容那么此处已经成功

curl http://example.com/.well-known/test.html  

执行命令申请生成证书,等待打印结果,如果没问题会提示你的证书存放位置

/root/.acme.sh/acme.sh --issue -d example.com --webroot /usr/local/nginx/html/acme/example.com --log

部署 安装证书到nginx,根据自己实景情况运行以下命令

/root/.acme.sh/acme.sh --install-cert -d example.com \
--key-file /etc/nginx/conf/cert/lincense/example.com.key \
--fullchain-file /etc/nginx/conf/cert/lincense/example.com_fullchain.cer \
--reloadcmd "nginx -s reload"

泛域名证书申请
DNS API 方式
自动 DNS 验证方式需要使用域名解析服务商的 DNS API,像腾讯云(DNSPos)和阿里云都提供 DNS API 功能。
如果你用的是腾讯云 DNSPod,在右上角头像下拉中选择“API 密钥”,点击“DNSPos Token”创建密钥
如果你用的是阿里云,在右上角头像下拉中选择“AccessKey 管理”,创建密钥
创建好密钥后,使用如下命令把它们的 Id 和 Token 或 Secret 放到环境变量中:

**# 腾讯云**
export DP_Id="YourId"
export DP_Key="YourToken"
**# 阿里云**
export Ali_Key="YourAccessKeyId"
export Ali_Secret="YourAccessKeySecret"

再通过下面命令生成证书:

腾讯云
acme.sh --issue --dns dns_dp -d example.com -d *.example.com
阿里云
acme.sh --issue --dns dns_ali -d example.com -d *.example.com

注意:这里第一个域名为顶级域名,后面一个为泛域名。这种方式将自动为你的域名添加一条 TXT 解析,验证成功后,这条解析记录会被删除,对你来说是无感的。如果使用一段时间后发现没有自动申请证书,并且手动申请提示没有添加TXT解析值,大概率的问题是accesskey需要重新加载到环境变量。

证书生成成功后,默认保存在 ~/.acme.sh/example.com/ 目录中。请不要直接使用 ~/.acme.sh/ 目录下的文件,这里面的文件都是内部使用的,而且目录结构可能会变化,我们需要把证书复制到需要用的地方去同上webroot方式部署安装证书。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值