SeedPeer的TLS配置相关问题
如图,这些地方如果打开了 TLS 则需要填写证书. 那这个证书是可以用自己签发的,还是常规 CA 签发的?
而此处可以从 manager 签发证书,那这个证书是否可以用于上面的服务呢? 如果可以,这也许是一个新的 Feature
还是说文档还没完善到这一步? 暂且没有参考?
只要是 CA 就可以了,谁签发的都一样。上一个 issue 功能我已经实现完了,参考 #1887。 具体文档是需要完善一下,有兴趣可以在官网 Reference 帮忙完善一个 Security 的文档。
~~ syncPieceViaHTTPS 这个文档没有说. 打开之后可以在节点之间的请求使用 HTTPS. 但是代码处理有一些问题,此处暂且不表,我会单独开一个 issue 说明
根据此处定义
https://github.com/dragonflyoss/Dragonfly2/blob/7d7984d3bb36efbc5f5067ef9b381ec58cbd5829/client/config/peerhost.go#L309
这个选项要放在 download 节点下
download:
syncPieceViaHTTPS: true
经确认确实开启了使用 HTTPS 请求其他节点

但是同样的, 请求中打码的部分是 IP 也就意味着他在使用 IP+HTTPS. 这给签发证书带来了问题. 签发一张合法的 IP SSL 证书并不容易.
此处我配置的是 Let's Encrypt 签发的域名证书,自然是不包含 IP SAN 的. 所以请求失败了.
希望此处可以改进一下,使用 Peer 报告给 Manager 的主机名进行连接. 或者在 autoIssue 之后自动装配上自签名证书.
但是同样的, 请求中打码的部分是 IP 也就意味着他在使用 IP+HTTPS. 这给签发证书带来了问题. 签发一张合法的 IP SSL 证书并不容易.
此处我配置的是 Let's Encrypt 签发的域名证书,自然是不包含 IP SAN 的. 所以请求失败了.
希望此处可以改进一下,使用 Peer 报告给 Manager 的主机名进行连接. 或者在 autoIssue 之后自动装配上自签名证书.
@chisaato 请问你最后是怎么解决给peer签发server证书的呢,目前最新版的我试了下也还是sans校验的问题
如果把upload.security.insecure设置为false无法从其他peer通过https下载,因为server证书校验不能通过,只能设置为true
比如peer配置如下,peer之间开启了https下载,但是 peer 在 upload 的 65002 端口的server证书使用的是我自签发的,不是自动生成的
download:
calculateDigest: true
syncPieceViaHTTPS: true
downloadGRPC:
security:
insecure: false
caCert: /etc/d7y-root-ca-key/ca.crt
cert: /etc/d7y-peer-server-cert/server.crt
key: /etc/d7y-peer-server-cert/server.key
tlsVerify: true
unixListen:
socket: ""
peerGRPC:
security:
insecure: false
caCert: /etc/d7y-root-ca-key/ca.crt
cert: /etc/d7y-peer-server-cert/server.crt
key: /etc/d7y-peer-server-cert/server.key
tlsVerify: true
tcpListen:
port: 65000
perPeerRateLimit: 512Mi
prefetch: false
totalRateLimit: 1024Mi
upload:
rateLimit: 1024Mi
security:
insecure: false
caCert: /etc/d7y-root-ca-key/ca.crt
cert: /etc/d7y-peer-server-cert/server.crt
key: /etc/d7y-peer-server-cert/server.key
tlsVerify: true
tcpListen:
port: 65002
由于 uploadListener 调用 prepareTCPListener 这里写死了 true https://github.com/dragonflyoss/Dragonfly2/blob/55473074450570fb560ee0587c14b52c74561f0c/client/daemon/daemon.go#L619 导致 uploadListener 直接就使用了自签发的 server 证书 https://github.com/dragonflyoss/Dragonfly2/blob/55473074450570fb560ee0587c14b52c74561f0c/client/daemon/daemon.go#L544 https://github.com/dragonflyoss/Dragonfly2/blob/55473074450570fb560ee0587c14b52c74561f0c/client/daemon/daemon.go#L569 而peer 65000 grpc 端口由于写死了 false,并不会使用配置里的自签发server证书,使用的是后续动态生成的 server 证书 https://github.com/dragonflyoss/Dragonfly2/blob/55473074450570fb560ee0587c14b52c74561f0c/client/daemon/daemon.go#L608
我记忆里是丢了个能跑的证书先让他起来,我再改配置用服务端签发下来的证书,同时ca分发到每个节点上 现在想想也许给所有节点套个 Tailscale 再配 HTTP 或许还轻松点?
当初提issue的时候我还是用compose搭的,现在已经全面转向K3S了,再也不自己倒腾每一行配置了,太费劲
Please refer to https://d7y.io/docs/next/operations/best-practices/security/#mutual-tls.