4

我成功使用了 certbot-nginx 插件。

我知道是开源的并托管在 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;

此访问限制禁止 letencrypt 服务器以及所有其他未定义的主机。

certbot renew --nginx正常执行证书更新。

它是如何工作的 ?

如果它是安全的?

4

1 回答 1

6

我自己也在问同样的问题,所以我做了一些挖掘,这就是我发现的:

Certbot 主要使用 80 或 443 端口进行挑战(http-01tls-sni-01)来验证域所有权,如certbot 文档中所述:

在幕后,插件使用几个 ACME 协议挑战之一来证明你控制了一个域。选项有 http-01(使用端口 80)、tls-sni-01(端口 443)和 dns-01(需要在端口 53 上配置 DNS 服务器,尽管这通常与您的网络服务器不同)。一些插件支持不止一种挑战类型,在这种情况下,您可以使用 --preferred-challenges 选择一种。

查看挑战的certbot_nginx 插件实现http-01我们可以看到插件编辑 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
    """
于 2018-02-20T12:51:27.657 回答