我有一个托管在 docker 中的 Nexus 服务器,以及一个 Traefik 实例。
如果在端口 443 的域上运行testssl,我会得到以下信息,表明它仍然支持 TLS1.2:
Service detected: HTTP
Testing protocols via sockets except NPN+ALPN
SSLv2 not offered (OK)
SSLv3 not offered (OK)
TLS 1 not offered
TLS 1.1 not offered
TLS 1.2 offered (OK)
TLS 1.3 offered (OK): final
这是我的 traefik.yml 文件:
log:
level: ERROR
entryPoints:
web:
address: :80
websecure:
address: :443
http:
routers:
http-catch-all:
rule: hostregexp(`{host:.+}`)
entrypoints: web
middlewares:
- always-https
middlewares:
always-https:
redirectscheme:
scheme: https
providers:
docker:
exposedByDefault: false
certificatesResolvers:
myresolver:
acme:
dnschallenge:
provider: route53
resolvers:
- "1.1.1.1:53"
- "8.8.8.8:53"
storage: /letsencrypt/acme.json
这是我的 docker-compose 文件:
services:
traefik:
image: traefik:v2.10
container_name: traefik
restart: always
command:
- "--configFile=/traefik.yml"
ports:
- 80:80
- 443:443
environment:
- "AWS_ACCESS_KEY_ID=***"
- "AWS_SECRET_ACCESS_KEY=***"
- "AWS_REGION=us-east-1"
- "AWS_HOSTED_ZONE_ID=***"
networks:
- nexus
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- "/docker/letsencrypt:/letsencrypt"
- "/docker/traefik/traefik.yml:/traefik.yml:ro"
logging:
driver: "json-file"
options:
max-file: "5"
max-size: "10m"
nexus:
container_name: nexus
image: sonatype/nexus3
restart: always
ports:
- 8081:8081
networks:
- nexus
volumes:
- /nexus-data:/nexus-data
labels:
- traefik.http.routers.nexus.rule=Host(`my-hostname`)
- traefik.enable=true
- traefik.http.routers.nexus.entrypoints=websecure
- traefik.http.routers.nexus.tls=true
- traefik.http.routers.nexus.tls.certresolver=myresolver
logging:
driver: "json-file"
options:
max-file: "5"
max-size: "10m"
networks:
nexus:
external: true
我正在关注此页面,然后我将其添加到上面的 traefik.yml 文件的底部:
tls:
options:
default:
minVersion: VersionTLS13
mintls13:
minVersion: VersionTLS13
对于 docker-compose.yml 文件中
nexus
服务的标签,我添加了:
- traefik.http.routers.nexus.tls.options=mintls13@file
但是,当我重新加载容器时,我会在日志中看到以下内容:
traefik | time="2025-01-19T15:30:08Z" level=error msg="building router handler: unknown TLS options: mintls13@file" entryPointName=websecure routerName=nexus@docker
traefik | time="2025-01-19T15:30:08Z" level=error msg="unknown TLS options: mintls13@file" entryPointName=websecure routerName=nexus@docker
并且我仍然从
testssl
获得相同的输出,表明它仍然支持最低 TLS 1.2。如果我删除 mintls13
和 traefik.yml
文件中的 docker-compose.yml
条目 - 意味着应根据 traefik 文档中的内容选择默认 TLS 最低版本 1.3:
默认选项是特殊的。当 tls 路由器中未指定 tls 选项时,将使用默认选项。
我没有收到任何错误,但
testssl
仍然告诉我它至少支持 TLS 1.2,因此显然也看不到我在 traefik.yml
中设置的 TLS 默认选项。
如果我同时关闭
nexus
和 traefik
服务,testssl
在那里看不到任何内容,但如果我只启动 traefik
服务,我会得到与上面相同的 testssl
输出,并且具有最低 TLS 1.2
我哪里出错了?
tls
(和 http
)是 Traefik 动态配置。将其放在单独的文件中,并通过 providers.file
(doc) 将其加载到静态配置中。
您的 http 到 https 重定向可以全局放置在
entrypoint
上,检查 简单的 Traefik 示例。
请注意,您应该更新您的 Traefik 镜像版本。