我正在尝试在 docker 中为 https 设置 Traefik。但我收到错误:
traefik | time="2020-07-10T11:33:46Z" level=error msg="无法获取域“my.domain.com”的 ACME 证书:无法为域 [my.domain.com] 生成证书:错误:一个或多个域有问题:\n[my.domain.com] acme:错误:403 :: urn:ietf:params:acme:error:unauthorized :: tls-alpn-01 质询的验证证书不正确。缺少 acmeValidationV1 扩展。,url:\n" routerName=project_name@docker rule="Host(
my.domain.com
)" providerName=myresolver.acme
我通过搜索术语“tls-alpn-01 质询的验证证书不正确“ 和 ”缺少 acmeValidationV1 扩展“但却找不到任何可以解决我的问题的东西。
以下是完整的 docker-compose 文件:
version: "3"
services:
traefik:
image: "traefik:v2.2"
container_name: "traefik"
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.websecure.address=:8082"
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
- "[email protected]"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
ports:
- "8082:8082"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
project_name:
container_name: project_name
build:
context: .
dockerfile: Dockerfile
volumes:
- ./:/app
command: sh -c "uvicorn src.main:app --host=0.0.0.0 --port=8000"
labels:
- "traefik.enable=true"
- "traefik.http.routers.project_name.rule=Host(`my.domain.com`)"
- "traefik.http.routers.project_name.entrypoints=websecure"
- "traefik.http.routers.project_name.tls.certresolver=myresolver"
- "traefik.http.services.project_name.loadbalancer.server.port=8000"
答案1
我没有使用 Traefik,但我使用 acme-tls/1 客户端时收到了“缺少 acmeValidationV1 扩展”错误。
这解决方法我发现使用MaxProtocol
“TLSv1.2”配置我的 Web 服务器(有效禁用“TLSv1.3”)
在 TLSv1.3 中,证书扩展以加密扩展
我尚未弄清楚链中的哪些部分处理得不好。(Let's Encrypt 或客户dehydrated
端或我的网络服务器或底层 TLS 库)
[编辑] 续订后,现在强制续订(dehydrated -x
)适用于 TLSv1.3(?!)我的原始证书已过期,如果有任何区别的话。
[编辑] 似乎没有强制验证。dehydrated -x --force-validation
我发现我仍然在测试--ca letsencrypt-test
。在使用简单的响应程序后https://github.com/dehydrated-io/dehydrated/blob/master/docs/tls-alpn.md除了我自己的 acme-tls/1 APLN 响应器之外,我自己的 acme-tls/1 ALPN 响应器也适用于强制验证。... 我不确定为什么现在事情可以正常工作,但我想我会用其他人可以尝试的替代方案更新这篇文章。
答案2
新答案:如果你打开附加跟踪,你可能会发现(就像我一样)这是"Missing acmeValidationV1 extension"
由于应用程序使用以下代码响应 TLS-ALPN-01(ALPN“acme-tls/1”)请求造成的错误的证书,而不是发送生成的包含扩展的 ACME 挑战证书id-pe-acmeIdentifier
。