×

acme.sh项目官方Wiki中文说明

申请证书之前你当然需要有一个自己的域名,你可以在各种域名注册商注册,如namenamecheapspaceship等。

你可以通过tld-list来查看市面主流域名注册商的优惠信息(优惠码),spaceship经常打折,提供免费的邮件转发

tld-list.com

acme通过dns记录验证网站验证来获取证书。详细的验证技术细节可以参考let’s encrypt的说明。使用dns记录验证可以规避网站配置的麻烦(你可能需要为了能够验证而修改nginx配置,特别是当你已经使用nginx),但是使用dns记录验证意味着你需要使用acme.sh 的 dns_api ,需要你获取域名解析服务商的密钥或者api之类的。

安装acme.sh

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

在使用 acme.sh 时需要使用邮箱地址在对应的 CA 处注册一个账户用于申请证书,如默认的zerossl。你也可以不带-s [email protected],之后再创建。

官方说明中指出安装脚本会做的事情:

把 acme.sh 安装到你的 /home/user 或者/root下的~/.acme.sh/acme.sh

创建一个 shell 的 alias(别名), 例如 .bashrc,方便你的使用: alias acme.sh=~/.acme.sh/acme.sh

自动为你创建 cronjob(定时任务), 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。 可以通过crontab -l检查

创建账户

官方支持的CA简写,使用命令更改默认CA(证书签发机构)。如:

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

acme.sh --set-default-ca --server zerossl

acme.sh --set-default-ca --server google

创建账户:

acme.sh --register-account -m [email protected]

创建的账户资料会保存在~/.acme.sh/acme.sh/ca

如果你想使用 GTS(Google Trust Services)CA,你无法直接通过acme.sh注册账户,而需要先在Google Cloud中注册:google官方说明

Console中的 IAM和管理 中先创建项目,在网页右上角中使用 cloud shell申请EAB密钥

gcloud publicca external-account-keys create

再在本机acme中使用刚生成的密钥注册:

acme.sh --register-account -m "EMAIL" --server google  --eab-kid "EAB_KID" --eab-hmac-key "HMAC_KEY"

eab-hmac-key 是比较长的那个,测试和正式环境需要单独生成密钥进行注册,账户是分开的,密钥被注册使用后后会失效。

使用dns_api验证所有权

DNS 验证无需物理托管,无论服务器的物理位置如何,或者是否有多个服务器,只要能控制 DNS 记录,就可以为域名颁发证书。DNS 验证显示了对域名 DNS 记录的控制权,这通常意味着更高级别的认证和安全保障,通配符证书(*.example.tld)只能通过DNS验证。

你通常可以比较轻松地获取域名解析提供商(如cloudflare、azure、dnspod等)的api来配合acme.sh使用,acme.sh已经编写好了许多市面上常用的域名解析服务商的脚本内置于项目中;如果你想自己使用bind9为自己的域名搭建解析服务,参考搭建域名解析服务nsupdate使用方法

以Cloudflare为例:

Cloudflare对应的脚本是dns_cf,在命令中添加 --dns dns_cf 使用,其它域名解析商参考官方说明

使用前我们去Cloudflare获取对应的域名dns修改权限的API令牌。

去往右上角我的个人资料中。

API令牌中创建令牌

权限中选择编辑,在区域资源中添加你需要申请证书的域名,在客户端IP筛选中添加你使用acme.sh 的主机IP地址,以增加安全性。

继续以创建令牌

然后cloudflare会自动为你生成API令牌

接下来,我们使用这个API令牌来进行证书申请,在shell中输入并回车,记得替换为你刚申请的API令牌:

export CF_Token="Your_CF_Token"

export命令会生成一个环境变量,使用printenv命令可以查看所有环境变量

使用过一次的CF_Token会自动存储在~/.acme.sh/acme.sh/account.conf,不需要每次都export

所以你也可以直接修改~/.acme.sh/acme.sh/account.conf 添加:

SAVED_CF_Token='Your_CF_Token'

最后你可以使用acme.sh申请证书

acme.sh --issue --server google -d *.你的域名 --dns dns_cf --keylength ec-256
可以通过--server 选择别的CA
acme.sh --issue --dns dns_cf -d www.example.com

修改以下命令,将证书“安装”到你想要的地方

acme.sh --install-cert -d 你的域名 \
--cert-file "/path/to/你的域名.cer" \
--key-file      "/path/to/你的域名.key"  \
--fullchain-file "/path/to/你的域名_fullchain.cer" \
--reloadcmd     "sudo service nginx force-reload"

reloadcmd "sudo service nginx force-reload" 是重启nginx的命令,让nginx使用新的证书;--fullchain-file不是必须安装的

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

相关文章

Spamhaus数据库

Spamhaus提供了基于DNS的方式查询I...

读出全部

增加wordpress上传大小限制

默认设置下wordpress上传大小限制为2...

读出全部

使用curl命令发送邮件

通过curl来发送简单邮件,并提供了一个脚本...

读出全部

nsupdate使用方法

我们可以使用nsupdate命令来更新域名记...

读出全部

搭建从服务器

如果你有多个服务器,你可以尝试为域名解析搭建...

读出全部