ssl - Traefik:使用默认证书时日志中的“无需为域生成 ACME 证书”
问题描述
我正在为我的 Docker Swarm 的 Let's Encrypt 设置而苦苦挣扎。Traefik 在我的堆栈的撰写文件中以这种方式启动:
image: traefik:v2.2
ports:
- 80:80
- 443:443
- 8080:8080
command:
- --api
- --log.level=DEBUG
- --providers.docker=true
- --providers.docker.endpoint=unix:///var/run/docker.sock
- --providers.docker.swarmMode=true
- --providers.docker.exposedbydefault=false
- --providers.docker.network=traefik-public
- --entrypoints.http.address=:80
- --entrypoints.https.address=:443
- --certificatesResolvers.certbot=true
- --certificatesResolvers.certbot.acme.httpChallenge=true
- --certificatesResolvers.certbot.acme.httpChallenge.entrypoint=http
- --certificatesResolvers.certbot.acme.email=${EMAIL?Variable EMAIL not set}
- --certificatesResolvers.certbot.acme.storage=/certs/acme-v2.json
- --certificatesResolvers.certbot.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
...networks, volumes...
deploy:
mode: replicated
replicas: 1 # to avoid concurrency issues
...
labels:
- "traefik.docker.network=traefik-public"
- "traefik.enable=true"
- "traefik.http.services.traefik.loadbalancer.server.port=8080"
- "traefik.http.routers.traefik.rule=Host(`traefik.my-domain.com`)"
- "traefik.http.routers.traefik.entrypoints=http,https"
- "traefik.http.routers.traefik.tls.certresolver=certbot"
- "traefik.http.routers.traefik.middlewares=traefik-auth"
- "traefik.http.middlewares.traefik-auth.basicauth.users=admin:${HASHED_PASSWORD?Variable HASHED_PASSWORD not set}"
我不能得到更多
level=debug msg="No ACME certificate generation required for domains [\"traefik.my-domain.com\"]." providerName=certbot.acme routerName=traefik@docker rule="Host(`traefik.my-domain.com`)"
我想知道为什么在 Firefox 抱怨获得“TRAEFIK DEFAULT CERT”(Chromium 也顺便说一句)时不需要 ACME 证书。
我也试过:
- 没有让我们加密的登台服务器
- 我希望通过 DNS 挑战使其与通配符 *.my-domain.com 一起用于开发目的(与 certbot 一起手动工作)。
- 设置 traefik.my-domain.com DNS 区域(从问题中删除通配符大小写)
- 使用 TRAEFIK DEFAULT CERT更改了此处建议的使用全局部署的“复制”模式Traefik + Consul not 在复制模式下生成 SSL 证书
- 我目前正在寻找一种直接在我的服务器上使用 Certbot 处理证书更新的方法......
解决方案
我遇到了同样的问题,它帮助我更改了存储 acme.json 的卷。我认为这是因为 Traefik 看到acme.json不为空,他根本不要求新证书。
所以如果你使用类似的东西:
command:
...
- --certificatesResolvers.certbot.acme.storage=/certs/acme-v2.json
volumes:
- "certs:/certs"
尝试使用不同的音量:
command:
...
- --certificatesResolvers.certbot.acme.storage=/letsencrypt/acme-v2.json
volumes:
- "letsencrypt:/letsencrypt"
推荐阅读
- java - java - 如何在不删除内容的情况下在java中打开文件?
- react-native - 反应原生 StyleSheet.create 我应该把
- view - 网格视图数据丢失或未呈现我的 RSS 提要
- r - 在神经网络包出现错误时改变阈值的值 - R
- python - 运行 Python FLEX 模板时出错:找不到子目录中的模块
- pdf - SharePoint 2016 中的 PDF 表单
- api - Pokémon GO raid boss API
- kotlin - Intellij-IDEA 中哪个目标 JVM 设置优先?
- python - 是否可以在 Python Kivy App 中动态设置文本的大小?
- javascript - 如何在html中显示文件内容?