acme.sh使用Let's Encrypt+Cloudflare API的方式申请SSL证书
日常在群里潜水时发现的很多小伙伴使用Docker搭建Nginx Proxy Manager的做Web服务器,然后遇到Internal Error以后一脸懵逼,只能求助群友。
诚然对于新手而言申请证书+Nginx配置的过程看起来让人望而却步,而恰巧NPM有个看起来相对友好的界面,提供了一站式的解决方案,让人觉得应该会很好入门,然而使用起来却经常在碰到各种问题以后经常令人无处着手。
究其原因根源还是不理解整个流程,而NPM又把acem.sh和Nginx的细节隐藏起来成为了一个黑盒,所以一旦发生错误,就完全无处着手了,只能各种尝试,但acem.sh证书申请过程恰恰是最容易发生报错的,尤其初期各种折腾的阶段,有可能前面一次是成功的而完全相同的设置后一次就是失败的,导致最后只能在不断尝试以后靠玄学配置,或在不断尝试不断失败后最终放弃。
个人而言,这个折腾的过程中花费的时间精力成本,真不如直接上手acme.sh和Nginx,去完整的走完整个流程,这其实也能更有效的理解NPM如何使用,但其实往往理解以后会发现完全没有必要为了个界面去使用NPM了。
好了废话少说,为了解决小伙伴们的入门难题,方便小伙伴们入坑,我这里准备通过两篇文章,提供一个高成功率的基础案例,这是第一篇使用acme.sh使用Let’s Encrypt+Cloudflare API的方式申请SSL证书,那么现在开始吧。
前置条件
申请注册Coudflare账号 将域名托管至Cloudflare 获取Global API Key 安装 acme.sh 安装很简单, 一个命令:
1
curl https://get.acme.sh | sh -s [email protected] #记得改成自己的邮箱
设置别名:
1
alias acme.sh=~/.acme.sh/acme.sh #以后直接用acme.sh命令就能运行了,不用再输入完整路径
设置自动更新:
1
acme.sh --upgrade --auto-upgrade
申请证书
设置必要参数:
1
2
3
4
CF_Domain="域名" #替换为你自己的域名,例子:输入aa.com,则自动申请aa.com和*.aa.com的所有二级域名的泛域名证书
CF_AccountEmail="Cloudflare账号邮箱" # #替换为你自己的Cloudflare账号邮箱
CF_GlobalKey="Cloudflare Global API KEY" #获替换为你自己的Global API Key ,取方式:登录cloudflare -> 右上角用户图标 -> 我的个人资料 -> API令牌 -> Global API Key 查看
Cert_Path=/root/cert #可以修改为自己喜欢的路径
创建目录+清除已有的证书:
1
2
3
4
5
6
7
if [ ! -d "$Cert_Path" ]; then
mkdir $Cert_Path
else
rm -rf $Cert_Path
mkdir $Cert_Path
fi
rm -rf ~/.acme.sh/${CF_Domain}
切换到Let’s Encrypt并申请证书:
1
2
3
4
5
acme.sh --set-default-ca --server letsencrypt
export CF_Key="${CF_GlobalKey}"
export CF_Email="${CF_AccountEmail}"
acme.sh --issue --dns dns_cf -d ${CF_Domain} -d *.${CF_Domain} --log
将证书安装到前面指定的路径:
1
2
3
4
5
acme.sh --installcert -d ${CF_Domain} -d *.${CF_Domain} \
--ca-file ${Cert_Path}/ca.cer \
--cert-file ${Cert_Path}/${CF_Domain}.cer \
--key-file ${Cert_Path}/${CF_Domain}.key \
--fullchain-file ${Cert_Path}/fullchain.cer
本文由作者按照
CC BY 4.0
进行授权