Use Existing TLS certificate with Traefik 2
在我之前所有关于Traefik 2的文章里面我都是用Traefik自动在LetsEncrypt或者BuyPass去获取SSL证书。这两个地方获取的证书都是DV的证书,也许有些企业需要使用他们自己更高级的SSL证书。今天的文章讲的就是如何在Traefik上使用自己的证书。
Traefik 2有多种配置方法,本文的配置只适用于我自己对于Traefik的理解和配置
根据官方的说明,看起来我们只需要在Dynamic Configuration里面添加证书的路径即可。
1 | # Dynamic configuration |
事情当然没有这么简单,你需要先做两件事情。
修改docker compose文件
首先我们把SSL证书和私钥放在~/data/ssl/
这个文件夹里,然后我们在docker-compose.yml
文件的Volume部分把它挂载进Traefik的container。
1 | ... |
修改static configuration文件
然后我们来到我们的静态配置文件~/data/traefik.yml
,在Entrypoint里面把TLS的certResolver给删除(我这里是选择注释掉这两行),然后添加tls: {}
^1即可。请注意我这是用的Traefik 2.2版本default router configuration,也就是说每一个连接到Traefik的service都会默认使用这里的TLS选项。一旦你选择使用自己的证书,Traefik下所有的服务的证书都需要你自己提供。(我尝试了用label给其他服务添加certResolver
想着可以override这里的选项,但是不起作用)
1 | ... |
修改Dynamic Configuration文件
最后轮到修改我们的动态配置文件~/data/configurations/dynamic.yml
。由于我在docker-commpose.yml
里挂载~/data/ssl/
到traefik里面的文件夹的位置是名字是 /ssl/
,所以我们需要在这个文件夹里面使用证书。如果忘记挂载的话,dynamic.yml
是访问不到我们存放在服务器上的文件的。
1 | ... |
对于SSL证书稍微有点了解的朋友应该知道证书还存在证书链的问题,在Apache里面我们需要在Virtual Host里面指定
SSLCertificateChainFile
。Traefik跟Nginx的类似,都是把证书链直接放到证书下面即可,如下。
1 | -----BEGIN CERTIFICATE----- |
之后运行docker-compose up -d
应该就可以成功使用证书了。
后记: 我最近开始慢慢的把我写的一些文章做成视频放在B站和YouTube上,因为我很清楚无论文字写的多详细,在实际操作的时候还是会出现各种各样的问题。如果可以跟随视频一步一步地左,对于很多朋友来说可能更有鼓励性,更容易成功。
好啦,本文就写到这里,有什么问题请留言。