<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hooks on 我的文档站</title><link>https://www.eternal.foo/docs/debian/certbot/hooks/</link><description>Recent content in Hooks on 我的文档站</description><generator>Hugo</generator><language>zh-CN</language><copyright>Copyright (c) 2020-2026 Thulite</copyright><atom:link href="https://www.eternal.foo/docs/debian/certbot/hooks/index.xml" rel="self" type="application/rss+xml"/><item><title>API Hook</title><link>https://www.eternal.foo/docs/debian/certbot/hooks/api-hook/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.eternal.foo/docs/debian/certbot/hooks/api-hook/</guid><description>&lt;ol&gt;
&lt;li&gt;原理&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Certbot 默认使用 HTTP-01 或 DNS-01 验证来证明你对域名的控制权。&lt;/p&gt;
&lt;p&gt;HTTP-01：在服务器上放置一个临时文件，让 Let’s Encrypt 访问验证。&lt;/p&gt;
&lt;p&gt;DNS-01：在域名 DNS 上添加 TXT 记录来验证。&lt;/p&gt;
&lt;p&gt;当你使用 DNS-01 + API 模式时，Certbot 不需要你手动去 DNS 管理后台添加 TXT 记录，而是直接调用 DNS 服务商的 API 自动完成验证。这通常通过 Certbot 的 DNS 插件（如 certbot-dns-cloudflare、certbot-dns-route53 等）实现。&lt;/p&gt;</description></item><item><title>Deploy Hook</title><link>https://www.eternal.foo/docs/debian/certbot/hooks/deploy-hook/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.eternal.foo/docs/debian/certbot/hooks/deploy-hook/</guid><description>&lt;p&gt;Deploy Hook 是 Certbot 中用于在证书成功签发或续期后自动执行脚本的一种机制。它常用于&lt;strong&gt;自动化部署证书&lt;/strong&gt;，比如重启服务、复制证书、更新配置等。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一certbot-hook-简介"&gt;一、Certbot Hook 简介&lt;/h2&gt;
&lt;p&gt;在 Certbot 的生命周期中，主要有三种 Hook：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Hook 类型&lt;/th&gt;
 &lt;th&gt;触发时机&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--pre-hook&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;申请/续期前执行&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--post-hook&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;申请/续期后执行（无论成功与否）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--deploy-hook&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;仅在证书成功更新后执行&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Deploy Hook 是最常用的一种自动化方式，因为它只在证书真正更新时触发，避免不必要操作。&lt;/p&gt;</description></item><item><title>Post Hook</title><link>https://www.eternal.foo/docs/debian/certbot/hooks/post-hook/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.eternal.foo/docs/debian/certbot/hooks/post-hook/</guid><description>&lt;h4 id="使用场景1--ha2"&gt;使用场景1 : ha2&lt;/h4&gt;
&lt;p&gt;假设我有一个程序是ha2,当Certbot自动更新完证书之后:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;需要将新证书复制到&lt;code&gt;etc/ha2&lt;/code&gt;目录下&lt;/li&gt;
&lt;li&gt;在复制证书之前停止ha2,复制完证书之后,重启ha2,实现重新载入新的证书&lt;/li&gt;
&lt;li&gt;可以根据自己的实际需求,修改&lt;code&gt;fullchain.pem&lt;/code&gt; 和 &lt;code&gt;privkey.pem&lt;/code&gt;证书权限.&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id="脚本示例1"&gt;脚本示例1:&lt;/h5&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;pre tabindex="0"&gt;&lt;code class="language-config" data-lang="config"&gt;#!/bin/bash

DOMAIN=&amp;#34;www.test.net&amp;#34;
SRC=&amp;#34;/etc/letsencrypt/live/$DOMAIN&amp;#34;
DST=&amp;#34;/etc/ha2&amp;#34;

#停止ha2
systemctl stop ha2-server.service

# 拷贝证书到 ha2 专用路径
cp &amp;#34;$SRC/fullchain.pem&amp;#34; &amp;#34;$DST/fullchain.pem&amp;#34;
cp &amp;#34;$SRC/privkey.pem&amp;#34; &amp;#34;$DST/privkey.pem&amp;#34;

# 设置安全权限
chown ha2:ha2 &amp;#34;$DST/fullchain.pem&amp;#34; &amp;#34;$DST/privkey.pem&amp;#34;
chmod 0644 &amp;#34;$DST/fullchain.pem&amp;#34;
chmod 0640 &amp;#34;$DST/privkey.pem&amp;#34;

#重启ha2
systemctl restart ha2-server.service&lt;/code&gt;&lt;/pre&gt;
 &lt;/figure&gt;
&lt;/div&gt;
&lt;h5 id="修改脚本"&gt;修改脚本&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;将&lt;code&gt;www.test.net&lt;/code&gt;修改成你真实需要的域名&lt;/li&gt;
&lt;li&gt;将&lt;code&gt;/etc/ha2&lt;/code&gt;改成你需要证书存放的目录&lt;/li&gt;
&lt;li&gt;将命令&lt;code&gt;grep ha2 /etc/passwd&lt;/code&gt;中&lt;code&gt;ha2&lt;/code&gt;修改你你实际的应用名称,并在终端中输入,并查看输出结果,例如:&lt;/li&gt;
&lt;/ol&gt;



&lt;div class="expressive-code"&gt;
 &lt;figure class="frame not-content"&gt;
 &lt;figcaption class="header"&gt;
 &lt;span class="title"&gt;&lt;/span&gt;
 &lt;/figcaption&gt;
 &lt;pre tabindex="0"&gt;&lt;code class="language-Terminal" data-lang="Terminal"&gt;root@test:~# grep ha2 /etc/passwd
ha2:x:999:996::/var/lib/ha2:/bin/sh&lt;/code&gt;&lt;/pre&gt;
 &lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;提示:
从上面输出我们已经得知,ha2的用户名是&lt;code&gt;ha2&lt;/code&gt;,因此根据你自己的实际需求修改&lt;code&gt;chown ha2:ha2 &amp;quot;$DST/fullchain.pem&amp;quot; &amp;quot;$DST/privkey.pem&lt;/code&gt;中的&lt;code&gt;ha2:ha2&lt;/code&gt;
提示:
&lt;code&gt;chown ha2:ha2 &amp;quot;$DST/fullchain.pem&amp;quot; &amp;quot;$DST/privkey.pem&lt;/code&gt;中
第一个&lt;code&gt;ha2&lt;/code&gt;是用户名,可以使用命令&lt;code&gt;getent passwd ha2&lt;/code&gt;验证用户是否存在
第二个&lt;code&gt;ha2&lt;/code&gt;是用户组,可以使用命令&lt;code&gt;id ha2&lt;/code&gt;验证&lt;code&gt;ha2&lt;/code&gt;用户所属的gid的name,例如:&lt;/p&gt;</description></item></channel></rss>