LetsEncrypt 证书更新从 dns 切换到 http

LetsEncrypt 证书更新从 dns 切换到 http

我最近将 letsencrypt 的 callenge 类型从 dns-01 切换到 http-01,因为我计划将来签署我的 dns 区域,因此不再需要自动区域操作。自从我做了这个改变后,我就不能再更新我的一些区域了(我假设这些区域是我最初通过 dns-challenge 签署的区域)。我的旧区域(从第一次使用开始 - 从一开始就使用 http)工作正常。

为了弄清楚,我用的是来自 lukas2511 的 dehydrated-client。我添加了一些调试输出来检查该脚本中是否存在问题 - 似乎没有。
请求挑战后,我收到了响应:

{
  "identifier":{
    "type":"dns",
    "value":"dennisschuerholz.de"
  },
  "status":"valid",
  "expires":"2017-04-16T11:43:43Z",
  "challenges":[
    {
      "type":"http-01",
      "status":"pending",
      "uri":"https://acme-v01.api.letsencrypt.org/acme/challenge/<some foo>/133324572",
      "token":"<some token>"
    },
    {
      "type":"tls-sni-01",
      "status":"pending",
      "uri":"https://acme-v01.api.letsencrypt.org/acme/challenge/<some foo>/133324573",
      "token":"<some token>"
    },
    {
      "type":"dns-01",
      "status":"valid",
      "uri":"https://acme-v01.api.letsencrypt.org/acme/challenge/<some foo>/133324574",
      "token":"<some token>",
      "keyAuthorization":"<some bar>",
      "validationRecord":[
        {
          "Authorities":[
            "dennisschuerholz.de.\t900\tIN\tNS\tns3.schuerholz.it.",
            "dennisschuerholz.de.\t900\tIN\tNS\tns1.schuerholz.it.",
            "dennisschuerholz.de.\t900\tIN\tNS\tns2.schuerholz.it.",
            "dennisschuerholz.de.\t900\tIN\tNS\tns.schuerholz.it."
          ],
          "hostname":"dennisschuerholz.de",
          "port":"",
          "addressesResolved":null,
          "addressUsed":""
        }
      ]
    }
  ],
  "combinations":[[0],[2],[1]]
}

我不太明白为什么 DNS 挑战类型仍然包含有关域的(过时的)信息,以及“expires”键是否与此有关。

如果我现在尝试响应挑战,状态将永远保持待定。

{
  "type":"http-01",
  "status":"pending",
  "uri":"https://acme-v01.api.letsencrypt.org/acme/challenge/<some foo>/133324572",
  "token":"<some token>"
}

看来我被困在 dns 质询类型中,想知道原因以及如何恢复它(如果可能的话)。我只是在 staging-path ( https://acme-staging.api.letsencrypt.org/directory) 上使用了相同的脚本和域,效果很好。

答案1

来自 LE 社区的 serverco向我解释发生了什么事

一旦域名被验证,该授权将被记住一段时间(我相信目前是 90 天),因此通过不同类型的质询(在您的情况下是 http)进行请求将导致始终获得“待定”,除非脚本注意到“状态”:“有效”。[..] dehydrated [..] 应该识别有效状态,并简单地获得新的证书。

我现在为我的脱水版本提供了一个补丁,如果不需要的话,它会跳过挑战。

相关内容