靜靜楊 發表於 2021-4-22 18:18:00

certbot-auto弃用后, 怎么继续用certbot申请泛域名证书

<p></p><div class="toc"><div class="toc-container-header">目录</div><ul><li>前言</li><li>正文<ul><li>安装snap</li><li>卸载旧的certbot</li><li>安装certbot</li><li>申请泛域名证书和自动续期<ul><li>申请前准备</li><li>申请证书</li><li>自动续期</li></ul></li></ul></li><li>FAQ<ul><li><ul><li>报错:/usr/bin/php: 没有那个文件或目录</li></ul></li></ul></li><li>参考资料</li></ul></div><p></p>
<h2 id="前言">前言</h2>
<p>certbot-auto申请证书时发现如下提示;certbot-auto被弃用了</p>
<pre><code>Skipping bootstrap because certbot-auto is deprecated on this system.
Your system is not supported by certbot-auto anymore.
Certbot cannot be installed.
Please visit https://certbot.eff.org/ to check for other alternatives.
</code></pre>
<p>根据github的issue看到作者的回应(原回复是英文, 我机翻了一下截图出来)</p>
<blockquote>
<p>github的issue: https://github.com/certbot/certbot/issues/8535</p>
</blockquote>
<p><img src="https://img2020.cnblogs.com/blog/955786/202104/955786-20210422150017987-1377582356.png"></p>
<h2 id="正文">正文</h2>
<h3 id="安装snap">安装snap</h3>
<p>centos7下的安装如下:</p>
<pre><code># 将EPEL添加到CentOS 7
yum install epel-release   
#安装snapd
yum install snapd
#安装后,需要启用用于管理主快照通信套接字
systemctl enable --now snapd.socket
# 启用快照支持
ln -s /var/lib/snapd/snap /snap
</code></pre>
<p>检查更新snap版本</p>
<pre><code> snap install core
snap refresh core
</code></pre>
<h3 id="卸载旧的certbot">卸载旧的certbot</h3>
<pre><code># 以前没有装过的不用这一步
yum remove certbot
</code></pre>
<h3 id="安装certbot">安装certbot</h3>
<pre><code># 安装certbot
snap install --classic certbot
# --classic: 官方对classic是如上面所描述的那样定义的,它是与strict相对的。也就是说,在默认情况下,它使用的是strict模式,对安全权限做了极高的要求与限制,然后classic就和传统的安装包一样对安全权限没有限制,其实这里的classic就约等于确认已知不安全的风险的含义

# 添加软链,全局使用
ln -s /snap/bin/certbot /usr/bin/certbot
</code></pre>
<h3 id="申请泛域名证书和自动续期">申请泛域名证书和自动续期</h3>
<h4 id="申请前准备">申请前准备</h4>
<blockquote>
<p>不管是申请还是续期,只要是通配符证书,只能采用 dns-01 的方式校验申请者的域名,也就是说 certbot 操作者必须手动添加 DNS TXT 记录。</p>
</blockquote>
<blockquote>
<p>如果你编写一个 Cron (比如 1 1 */1 * * root certbot-auto renew),自动 renew 通配符证书,此时 Cron 无法自动添加 TXT 记录,这样 renew 操作就会失败,如何 解决?</p>
</blockquote>
<blockquote>
<p>certbot 提供了一个 hook,可以编写一个 Shell 脚本,让脚本调用 DNS 服务商的 API 接口,动态添加 TXT 记录,这样就无需人工干预了。</p>
</blockquote>
<p>这里就要用到第三方插件: https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au, 目前支持阿里云 DNS、腾讯云 DNS、华为云 NDS、GoDaddy;</p>
<p>下载:</p>
<pre><code>git clone https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au

cd certbot-letencrypt-wildcardcertificates-alydns-au

chmod 0777 au.sh
</code></pre>
<h4 id="申请证书">申请证书</h4>
<pre><code># 例子(这些参数根据自己的情况填写)
certbot certonly
-d example.com                        
-d *.example.com                        
--manual                                    
--preferred-challenges dns
--dry-run               
--manual-auth-hook "/etc/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh python aly add"      # 申请之前添加TXT记录
--manual-cleanup-hook "/etc/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh python aly clean"       # 申请之后删除TXT记录
--pre-hook "systemctl stop nginx.service"    # 停止nginx
--post-hook "systemctl start nginx.service"# 启动nginx
</code></pre>
<ul>
<li>-d: 域名</li>
<li>--manual: 手动模式申请</li>
<li>--preferred-challenges: 验证方式</li>
<li>--dry-run: 测试模式(正式使用时去掉这个参数)</li>
<li>--manual-auth-hook: 以交互方式或使用shell脚本获取证书钩子</li>
<li>--manual-cleanup-hook: 以交互方式或使用shell脚本获取证书钩子</li>
<li>--pre-hook: 前置钩子;可用来执行一些命令</li>
<li>--post-hook: 后置钩子;可用来执行一些命令</li>
</ul>
<blockquote>
<p>详细的参数说明到github查看: https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au</p>
</blockquote>
<p>申请成功后:</p>
<pre><code>配置文件: /etc/letsencrypt/renewal/
证书文件源目录: /etc/letsencrypt/archive/
证书文件映射目录: /etc/letsencrypt/live/
</code></pre>
<p>知道了这些,我们来实际操作一下:</p>
<p>nginx(openresty)配置文件中添加ssl证书, 这个不用多说了</p>
<p>首先去配置一下第三方插件, 检查一下php和python执行程序的路径是否正确,并填写阿里云或者其他平台的key和token</p>
<p><img src="https://img2020.cnblogs.com/blog/955786/202104/955786-20210422171102541-1707281594.png"></p>
<ul>
<li>然后执行生成命令:</li>
</ul>
<pre><code>certbot certonly \
-d ranblogs.com \
-d *.ranblogs.com \
--manual \
--preferred-challenges dns \
--manual-auth-hook "/disk2/soft_pack/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh php aly add" \
--manual-cleanup-hook "/disk2/soft_pack/certbot-letencrypt-wildcardcertificates-alydns-au/au.sh php aly clean" \
--post-hook "cp -r /etc/letsencrypt/archive/ranblogs.com /disk2/nginx/cert/ranblogs.com &amp;&amp; docker restart openresty"

# post-hook: 我这里是docker环境无法找到外面的文件, 所以我这里是把证书文件放到docker映射的目录去了,并重启openresty
</code></pre>
<p>执行结果:</p>
<p><img src="https://img2020.cnblogs.com/blog/955786/202104/955786-20210422172238068-616676558.png"></p>
<p>验证结果:<br>
<img src="https://img2020.cnblogs.com/blog/955786/202104/955786-20210422173314251-511509744.png"><br>
<img src="https://img2020.cnblogs.com/blog/955786/202104/955786-20210422173317644-1732646728.png"></p>
<h4 id="自动续期">自动续期</h4>
<p>上面已经成功申请到证书了, 但是只有三个月的有效期, 这肯定是不够的, 还好certbot也提供了自动续期的命令<code>certbot renew</code></p>
<p>现在我们把这个命令加到定时器:</p>
<pre><code>crontab -e
# 定时续期(每天执行)
0 0 1 * * sudo certbot renew --deploy-hook"cp -r /etc/letsencrypt/archive/ranblogs.com /disk2/nginx/cert/ranblogs.com &amp;&amp; docker restart openresty"
</code></pre>
<blockquote>
<p>这里可能会有点疑问, 假如当天ssl到期了, 但是定时器还没执行, 是不是会有一段时间内https无法使用; 其实certbot已经考虑到了, 会在到期前30天续期;所以不用担心这个问题;</p>
</blockquote>
<h2 id="faq">FAQ</h2>
<h4 id="报错--usrbinphp-没有那个文件或目录">报错:/usr/bin/php: 没有那个文件或目录</h4>
<p>自己修改路径<br>
<img src="https://img2020.cnblogs.com/blog/955786/202104/955786-20210422165506474-444814919.png"></p>
<h2 id="参考资料">参考资料</h2>
<blockquote>
<p>certbot官网: https://certbot.eff.org/</p>
</blockquote>
<blockquote>
<p>https://blog.csdn.net/baidu_19473529/article/details/114277125</p>
</blockquote>
<blockquote>
<p>https://zhuanlan.zhihu.com/p/354241539</p>
</blockquote>
<blockquote>
<p>https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/trblog/p/14690908.html
頁: [1]
查看完整版本: certbot-auto弃用后, 怎么继续用certbot申请泛域名证书