免费申请 Let's Encrypt 泛域名证书
Let's Encrypt
是一家免费、开放、自动化的证书颁发机构(CA),为公众的利益而运行。它是一项由 Internet Security Research Group
(ISRG)提供的服务。[1]
前言
今天收到腾讯云的邮件,提醒我部署在 RT-AC87U
上的证书快要到期了。这个证书是免费申请的亚洲诚信一年,受限于“同一主域最多只能申请 20 张亚洲诚信品牌免费型 DV 版 SSL 证书”的约束条件,再加上不能泛域名签发,考虑将路由器和 NAS
上的证书都切换到 Let's Encrypt
的泛域名证书了。
看了下文档 [2],发现自动申请并到期续签不是太难。Let's Encrypt
提供了多种方式,官方推荐的是 Certbot
客户端 [3],试了下在 NAS
上不太好使,个人推荐兼容 bash
, dash
和 sh
多种 shell
环境的 acme.sh
脚本 [4]。
安装脚本工具
SSH
连接到 NAS
上,安装 acme.sh
有两种方式 :
-
在线安装 :
1
curl https://get.acme.sh | sh
或者
1
wget -O - https://get.acme.sh | sh
-
离线安装 :
1 2 3
git clone https://github.com/acmesh-official/acme.sh.git cd ./acme.sh ./acme.sh --install
默认安装到用户目录 ~/.acme.sh/
同时自动创建了一个 cron
任务,每天定时自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。
申请安装证书
由于没有公网 IP,只能使用 DNS API
验证的方式来自动申请证书,以 Cloudflare
域名解析服务为例。
切换到安装目录,复制子目录 dnsapi
下面的 dns_cf.sh
到安装根目录 :
|
|
修改 dns_cf.sh
,去掉 CF_Key
和 CF_Email
的注释,并用 Cloudflare
个人资料的 API
令牌 页面上的 Global API Key
和 账号绑定的邮件地址替换相应的值。
|
|
申请并安装泛域名证书 :
|
|
威联通默认的证书存储位置是 /etc/stunnel/
,其中 stunnel.pem
是证书和私钥二合一的证书,backup.cert
和 backup.key
是原始证书和私钥的备份,所以需要写一个脚本 reloadcmd.sh
来合并证书,日志位置可以指定,不指定默认保存在 ~/.acme.sh/acme.sh.log
:
|
|
证书安装的各种配置会保存在 233so.com.conf
,证书都会保存在域名目录(根据官方说明,不排除脚本后续更新后目录结构会发生变化),同时 CF_Key
和 CF_Email
会自动保存在 ~/.acme.sh/account.conf
供脚本下次自动使用。
更多域名解析服务商设置: https://github.com/acmesh-official/acme.sh/wiki/dnsapi
OSCP 域名污染
目前 Let’s Encrypty OCSP 调用的域名在国内部分地区没有被正确解析,原因是 Let’s Encrypty 使用的 Akamai a771 节点被污染。鉴于国内的运营商可能会劫持 DNS 查询,所以改 DNS 服务器地址未必有用,只能修改 hosts 指向记录来解决。
|
|
使用 IPIP 的 ping 工具,可以选择香港地区的服务器获取 ocsp.int-x3.letsencrypt.org 的正确解析记录。
|
|