Docker配置TLS认证
当拥有不只一台Linux服务器的时候就会想着把多台服务器的docker进行统一管理,而直接使用docker daemon socket是很不安全的,应为没有任何加密并且没有身份验证,任何人知道暴露的端口就可以操作本机的docker,而docker需要root权限运行,所以约等于让人得到了root权限。
为了解决这个问题,就需要启用证书的认证。
使用的平台
注:服务器信息经过处理
- Portainer Web服务器 地址:192.168.1.1
- 须启用docker daemon socket的远程主机 地址:192.168.2.1
两台主机系统均为Debian,并已经安装好了Docker
申请证书、修改配置这些操作均在须启用docker daemon socket的远程主机
进行操作
签发证书
这里使用自签名证书
这里创建一个文件夹用于存放所有证书
mkdir /home/ca
cd /home/ca
生成 CA 公钥和私钥
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem #此处创建的证书为十年,绝对够用到换服务器了
创建 Server 端证书
请自行替换本机地址
与本机域名
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=本机地址" -sha256 -new -key server-key.pem -out server.csr
echo subjectAltName = DNS:本机域名,IP:本机地址,IP:127.0.0.1 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
创建 client 证书
openssl genrsa -out key.pem 4096
openssl req -subj '/CN=此处填写对端主机地址' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth > extfile-client.cnf
openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf
修改docker的配置
修改/etc/default/docker文件
这里需要向文件中写入以下内容
DOCKER_OPTS=" -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --tls --tlscacert /home/ca/ca.pem --tlscert /home/ca/server-cert.pem --tlskey /home/ca/server-key.pem"
修改/lib/systemd/system/docker.service文件
修改或添加以下内容
EnvironmentFile=/etc/default/docker
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
重启docker
systemctl daemon-reload
service docker restart
修改ufw
根据上方修改的配置,我们的docker会监听来自2375
端口的请求,所以我们需要放行2375
端口
ufw allow 2375
ufw enable
连接远端的主机
现在我们回到Portainer Web服务器
,可参考下图经行连接远程主机
参考文章
Docker配置TLS认证
https://blog.xianyu.one/2022/05/07/docker/docker-daemon-tls/