Caddy“CSR 不包含足够短的 SAN,无法装入 CN”

Caddy“CSR 不包含足够短的 SAN,无法装入 CN”

TLS 证书中的通用名称 (CN) 长度限制为 64 个字符。

为如此长的子域名颁发证书时的技巧是将 CN 设置为其他内容(更短),并让证书认证多个域名,因为主题备用名称(SAN)可以更长。

当您设置 https Caddy 服务器时,它会为您与 let's encrypt 进行完整的协商,这样您就不必手动解决挑战。

但是当 caddy 服务器的域名很长时,它无法设置所有内容,因为用于 CN 的文本太长。

例如

如果你有这个Caddyfile

long-name-test.that-exceeds-max-common-name-allowance.frontend-ping.my-nice-domain.com {
    respond "SSL Test for checking how to handle long common names that exceed 64 chars"
}

然后你的球童日志会显示:

# TL;DR = "CSR doesn't contain a SAN short enough to fit in CN"
{
    "level":"error",
    "ts":1601630649.1419806,
    "logger":"tls.obtain",
    "msg":"will retry",
    "error":"[long-name-test.that-exceeds-max-common-name-allowance.frontend-ping.my-nice-domain.com] Obtain: [long-name-test.that-exceeds-max-common-name-allowance.frontend-ping.my-nice-domain.com] finalizing order https://acme-staging-v02.api.letsencrypt.org/acme/order/13716260/160342164: request to https://acme-staging-v02.api.letsencrypt.org/acme/finalize/13716260/160342164 failed after 1 attempts: HTTP 400 urn:ietf:params:acme:error:badCSR - Error finalizing order :: CSR doesn't contain a SAN short enough to fit in CN (ca=https://acme-staging-v02.api.letsencrypt.org/directory)",
    "attempt":2,
    "retrying_in":120,
    "elapsed":65.394715932,
    "max_duration":2592000
}

这个错误是自然的和预期的:试图设置一个不允许的长度超过 64 个字符的 CN。

现在的问题是

假设

  1. 长 CN 来自长子域名
  2. 并且我还拥有可以接受另一个短子域名的域名
  3. 并且所有这些都由球童控制

问:我如何指示 Caddy 服务器使长子域/域具有“较短的 CN”?

例如告诉球童:

long-name-test.that-exceeds-max-common-name-allowance.frontend-ping.my-nice-domain.com

使用方法:

CN=short.my-nice-domain.com
SAN=long-name-test.that-exceeds-max-common-name-allowance.frontend-ping.my-nice-domain.com

并且让 TSL 自动协商,而不是我来解决挑战?

相关内容