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。
现在的问题是
假设
- 长 CN 来自长子域名
- 并且我还拥有可以接受另一个短子域名的域名
- 并且所有这些都由球童控制
问:我如何指示 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 自动协商,而不是我来解决挑战?