为Docker的socket配置TLS加密
发表于|更新于
|字数总计:668|阅读时长:3分钟|阅读量:
homepage的tree
配置完应该是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| . ├── config │ ├── bookmarks.yaml │ ├── custom.css │ ├── custom.js │ ├── docker.yaml │ ├── kubernetes.yaml │ ├── logs │ │ └── homepage.log │ ├── racknerd-tls │ │ ├── ca-key.pem │ │ ├── ca.pem │ │ ├── cert.pem │ │ ├── key.pem │ │ ├── server-cert.pem │ │ └── server-key.pem │ ├── services.yaml │ ├── settings.yaml │ └── widgets.yaml ├── data.yml ├── docker-compose.yml ├── icons │ └── ... └── images └── ...
|
生成CA证书
1
| openssl genrsa -aes256 -out ca-key.pem 4096
|
然后输入两次密钥,并确保密钥被记住。
1
| openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
|
要求输入密钥以及CA机构的信息,可以随意填写(因为是个人CA)。
生成服务器密钥对
将下面的$HOST
改为需要开放TLS端口的Docker宿主机的DNS名称(即解析到这个伺服器的域名)。
1 2
| openssl genrsa -out server-key.pem 4096 openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
|
下面的10.10.10.20
的IP可以按需求更改或删除。这个IP表示可以通过此IP访问装有Docker的伺服器(即IP证书)。
1 2
| echo subjectAltName = DNS:$HOST,IP:10.10.10.20,IP:127.0.0.1 >> extfile.cnf echo extendedKeyUsage = serverAuth >> extfile.cnf
|
下面的365
可以更改为需要的天数,表示这张证书从现在起的有效天数。需要输入CA证书的密码。
1
| openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
|
生成客户端密钥对
第四部步命令依旧需要输入CA证书密码。尽量更改有效日数与服务端有效日数相同。
1 2 3 4
| openssl genrsa -out key.pem 4096 openssl req -subj '/CN=client' -new -key key.pem -out client.csr echo extendedKeyUsage = clientAuth > extfile-client.cnf openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf
|
移除临时文件
1
| rm -v client.csr server.csr extfile.cnf extfile-client.cnf
|
为证书文件赋权
1 2
| chmod -v 0400 ca-key.pem key.pem server-key.pem chmod -v 0444 ca.pem server-cert.pem cert.pem
|
服务端执行命令(临时运行)
1 2 3 4 5 6
| dockerd \ --tlsverify \ --tlscacert=ca.pem \ --tlscert=server-cert.pem \ --tlskey=server-key.pem \ -H=0.0.0.0:2376
|
服务端执行命令(持久运行)
将 ca.pem
, server-cert.pem
, server-key.pem
上传到伺服器的 /etc/docker/
目录中。
方法一:更改 Docker
启动配置文件
1
| sudo nano /lib/systemd/system/docker.service
|
在 ExecStart
后增加参数:
1
| --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:2376
|
方法二:更改 daemon.json
文件
这种方法需要删除 /lib/systemd/system/docker.service
中 ExecStart
后的参数 -H
。
1
| sudo nano /etc/docker/daemon.json
|
修改为:
1 2 3 4 5 6 7 8 9 10 11
| { "hosts": [ "fd://", "unix:///var/run/docker.sock", "tcp://0.0.0.0:2376" ], "tlsverify": true, "tlscacert": "/etc/docker/ca.pem", "tlscert": "/etc/docker/server-cert.pem", "tlskey": "/etc/docker/server-key.pem" }
|
重启服务
1 2
| sudo systemctl daemon-reload sudo systemctl restart docker
|