Traefik和自签名SSL

6

我对Traefik和Docker一窍不通。我使用以下方法准备了一个自签名证书:

openssl req -x509 -newkey rsa:4096 -keyout www.example.co.uk.key -out www.example.co.uk.crt-days 365

在我的traefik.toml文件中,我有以下内容:
[entryPoints]
  [entryPoints.http]
  address = ":80"
  [entryPoints.https]
  address = ":443"
  [entryPoints.https.tls]
    [[entryPoints.https.tls.certificates]]
    certFile = "certs/www.example.co.uk.crt"
    keyFile = "certs/www.example.co.uk.key"

然而,这样做会导致:
traefik          | time="2019-06-17T22:11:17Z" level=debug msg="Serving default cert for request: \"www.example.co.uk\""
traefik          | time="2019-06-17T22:11:17Z" level=debug msg="http: TLS handshake error from 172.20.0.1:57770: tls: no certificates configured"

如果我忽略证书定义,让traefik.toml文件如下所示:
[entryPoints]
  [entryPoints.http]
  address = ":80"
  [entryPoints.https]
  address = ":443"
  [entryPoints.https.tls]
  #  [[entryPoints.https.tls.certificates]]
  #  certFile = "certs/www.example.co.uk.crt"
  #  keyFile = "certs/www.example.co.uk.key"

我使用Traefik提供的虚拟证书,效果很好,但我只是想理解为什么我的定义证书没有被使用。

我相信在我的docker-compose.yml文件中已经挂载了正确的卷:

volumes:
  - /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events
  - ./traefik.toml:/traefik.toml
  - /var/www/docker/certs:/certs

证书存储在与我的 docker-compose.ymltraefik.toml 文件相对的 certs/ 目录中。权限看起来也没问题,都被 root 拥有 - crt 的访问权限是 644,key 的访问权限是 600。
我如何使用自签名证书替代 Traefik 默认的证书?
1个回答

7

可能是路径不匹配的问题,特别是一些相对路径和绝对路径。在您的compose文件中尝试以下内容(相对于本地证书的路径):

volumes:
  - /var/run/docker.sock:/var/run/docker.sock
  - ./traefik.toml:/traefik.toml
  - ./certs:/certs

然后在 toml 文件中切换到绝对路径(证书前面加上斜杠):

[entryPoints]
  [entryPoints.http]
  address = ":80"
  [entryPoints.https]
  address = ":443"
  [entryPoints.https.tls]
    [[entryPoints.https.tls.certificates]]
    certFile = "/certs/www.example.co.uk.crt"
    keyFile = "/certs/www.example.co.uk.key"

太好了。谢谢您。最后在toml文件中不需要前导斜杠。有一件事我想确认一下 - 当挂载文件时,使用绝对路径;当挂载目录时,使用相对路径 - 这是一个好的经验法则吗? - Zakalwe
@Zakalwe 当源文件位于您的项目内时,相对于compose文件,请使用相对目录。当它在主机上的特定位置时,请使用绝对路径。对于容器内的目标,请使用绝对路径。对于容器内的配置文件,则取决于您是否知道WORKDIR设置为何以及应用程序如何处理该设置。 - BMitch
啊!看起来很明显,但只有当有人明确指出时才真正有意义!再次感谢! - Zakalwe
为什么没有定义stores字段? - Chang Zhao
“存储字段”是什么?请注意,这个回答已经三年了,而Traefik自那时以来发生了很多变化。 - BMitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接