Letsencrypt certbot-nginx 插件。它是如何工作的?
Letsencrypt certbot-nginx plugin. How does it work?
我成功使用了 certbot-nginx 插件。
我知道 it 是开源的并且托管在 github 上。
但是我没有足够的技巧来分析这段代码。
例如:
我有几个由 nginx 代理的内部站点。所有虚拟主机配置都有以下匿名访问限制:
allow 192.168.1.0/24;
allow 192.168.0.0/24;
allow 10.88.0.0/16;
allow 127.0.0.1;
# gate1.example.com
allow X.X.X.X;
# gate2.example.com
allow X.X.X.X;
# other gate's
# .......
deny all;
此访问限制禁止 letsencrypt 服务器以及所有其他未定义的主机。
但是certbot renew --nginx
正常执行证书更新。
它是如何工作的?
它是否安全?
我自己也在问同样的问题,所以我做了一些挖掘,这是我发现的:
Certbot 主要使用 80 或 443 端口进行质询(http-01
和 tls-sni-01
)来验证域所有权,如 certbot docs:
中所述
Under the hood, plugins use one of several ACME protocol challenges to
prove you control a domain. The options are http-01 (which uses port
80), tls-sni-01 (port 443) and dns-01 (requiring configuration of a
DNS server on port 53, though that’s often not the same machine as
your webserver). A few plugins support more than one challenge type,
in which case you can choose one with --preferred-challenges.
查看 http-01
挑战的 certbot_nginx
plugin implementation 我们可以看到插件编辑 nginx 配置以包含用于执行挑战的额外服务器块:
def _make_server_block(self, achall):
"""Creates a server block for a challenge.
:param achall: Annotated HTTP-01 challenge
:type achall:
:class:`certbot.achallenges.KeyAuthorizationAnnotatedChallenge`
:param list addrs: addresses of challenged domain
:class:`list` of type :class:`~nginx.obj.Addr`
:returns: server block for the challenge host
:rtype: list
"""
我成功使用了 certbot-nginx 插件。
我知道 it 是开源的并且托管在 github 上。
但是我没有足够的技巧来分析这段代码。
例如:
我有几个由 nginx 代理的内部站点。所有虚拟主机配置都有以下匿名访问限制:
allow 192.168.1.0/24;
allow 192.168.0.0/24;
allow 10.88.0.0/16;
allow 127.0.0.1;
# gate1.example.com
allow X.X.X.X;
# gate2.example.com
allow X.X.X.X;
# other gate's
# .......
deny all;
此访问限制禁止 letsencrypt 服务器以及所有其他未定义的主机。
但是certbot renew --nginx
正常执行证书更新。
它是如何工作的?
它是否安全?
我自己也在问同样的问题,所以我做了一些挖掘,这是我发现的:
Certbot 主要使用 80 或 443 端口进行质询(http-01
和 tls-sni-01
)来验证域所有权,如 certbot docs:
Under the hood, plugins use one of several ACME protocol challenges to prove you control a domain. The options are http-01 (which uses port 80), tls-sni-01 (port 443) and dns-01 (requiring configuration of a DNS server on port 53, though that’s often not the same machine as your webserver). A few plugins support more than one challenge type, in which case you can choose one with --preferred-challenges.
查看 http-01
挑战的 certbot_nginx
plugin implementation 我们可以看到插件编辑 nginx 配置以包含用于执行挑战的额外服务器块:
def _make_server_block(self, achall):
"""Creates a server block for a challenge.
:param achall: Annotated HTTP-01 challenge
:type achall:
:class:`certbot.achallenges.KeyAuthorizationAnnotatedChallenge`
:param list addrs: addresses of challenged domain
:class:`list` of type :class:`~nginx.obj.Addr`
:returns: server block for the challenge host
:rtype: list
"""