Let's Encrypt是一个于2015年推出的数字证书认证机构,一直以来提供免费的SSL证书服务,直到今天我们期待已久的Let's Encrypt 泛域名SSL证书来了,使用acme.sh可以很方便的完成申请。
acme.sh 实现了 acme 协议,是一个开源的Let's Encrypt SSL申请工具,操作和流程比官方的申请方式简化很多,推荐大家使用。
安装acme.sh
以下命令请在Linux系统执行,root和普通用户均可安装。
#安装
curl https://get.acme.sh | sh
#让alias生效
source ~/.bashrc
设置DNS API
目前泛域名证书仅支持DNS验证,acme.sh通过DNS提供商的API自动完成操作,因此需要先设置DNS API,以CloudXNS为例。
在CloudXNS后台 - 用户中心 - API管理可以看到API KEY/SECRET KEY
,如果没有请自行创建并记录下来。
输入下面的命令导入密钥(CloudXNS),注意不同的DNS,导入的参数不一样,具体您可以参考:dnsapi
export CX_Key="1234"
export CX_Secret="sADDsdasdgdsf"
- CX_Key:对应CloudXNS API KEY
- CX_Secret:对应CloudXNS SECRET KEY
其它常用DNS API设置
CloudFlare
#导入密钥
export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export CF_Email="xxxx@sss.com"
#申请证书
acme.sh --issue --dns dns_cf -d example.com -d www.example.com
腾讯/DNSPod(国内版)
#导入密钥
export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"
#申请证书
acme.sh --issue --dns dns_dp -d example.com -d www.example.com
阿里云
#导入密钥
export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"
#申请证书
acme.sh --issue --dns dns_ali -d example.com -d www.example.com
更多DNS API设置请参考:https://github.com/Neilpang/acme.sh/tree/master/dnsapi
签发泛域名证书
以CloudXNS DNS为例,我们为awk.sh
签发一个泛域名证书。
acme.sh --issue --dns dns_cx -d awk.sh -d *.awk.sh
申请成功后会提示证书绝对路径(如下截图),接下来就可以在WEB服务上部署SSL证书了。
如果您使用的Nginx可参考《Nginx怎样部署SSL证书》部署SSL证书,一般只会用到fullchain.cer
、domain.com.key
这两个文件。
复制证书
前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件。正确的使用方法是使用 --installcert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:
acme.sh --installcert -d xiaoz.top \
--key-file /data/ssl/xiaoz.top.key \
--fullchain-file /data/ssl/xiaoz.top.cer \
--reloadcmd "service nginx force-reload"
总结
目前Let's Encrypt已经支持多域名、泛域名,但缺点是有效期依然只有三个月,即使可以设置脚本自动续期,但是管理维护还是有点不便。
部分内容参考与:https://github.com/Neilpang/acme.sh
1. 我觉得这样更好:
裸域名和泛域名一同申请了,并且明确指明申请的是wildcard证书
2. 参照官方的推荐,不要使用证书生成的地址,用这个命令拷贝到一个自定义的目录
然后在nginx里面修改为证书为自定义的目录即可
3. acme.sh会自动在crontab里面加上自动续期的命令,所以3个月就不需要多操心了
谢谢指导,我测试后尝试修改一下。虽然会添加crontab,但是如果将证书导出来在其它服务器用也不是很方便。