系统:centos7
docker:1.13.1
以下命令都在docker服务器上运行,使用root用户身份
创建CA私钥和CA公钥
(1)首先创建一个ca文件夹用来存放私钥跟公钥
mkdir -p /usr/local/ca
cd /usr/local/ca
(2)生成CA私钥和公钥
要输密码,示例使用 test
openssl genrsa -aes256 -out ca-key.pem 4096
(3)补全CA证书信息
可以随便输,示例都用 te
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
(4)生成server-key.pem
openssl genrsa -out server-key.pem 4096
(5)用CA签署公钥
192.168.1.102 改为实际ip
openssl req -subj "/CN=192.168.1.102" -sha256 -new -key server-key.pem -out server.csr
(6)匹配白名单,允许指定的ip可以连接到服务器中的docker,多个ip用逗号分隔。
192.168.1.102 改为实际ip
这里跟原文有点不一样,多写一个 IP:服务器地址 ,不然最后连接会报错。(想来应该是DNS:得改成IP:,毕竟用的不是dns)
echo subjectAltName = DNS:192.168.1.102,IP:192.168.1.102,IP:0.0.0.0 >> extfile.cnf
(7)将Docker守护程序密钥的扩展使用属性设置为仅用于服务器身份验证
echo extendedKeyUsage = serverAuth >> extfile.cnf
(8)生成签名整数
要输密码,示例为 test
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
(9)生成客户端的key.pem
openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
(10)要使秘钥适合客户端身份验证
echo extendedKeyUsage = clientAuth >> extfile.cnf
echo extendedKeyUsage = clientAuth > extfile-client.cnf
(11)生成签名整数
要输密码,示例为 test
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf
(12)删除不需要的文件,两个整数签名请求
rm -f -v client.csr server.csr extfile.cnf extfile-client.cnf
(13)限制文件权限
chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem
(14)归集服务器证书
cp server-*.pem /etc/docker/
cp ca.pem /etc/docker/
(15)修改Docker配置, 使Docker守护程序仅接收来自提供CA信任的证书的客户端的链接
vim /lib/systemd/system/docker.service
原博客是这样的:
将 ExecStart
属性值进行替换:
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/usr/local/ca/ca.pem --tlscert=/usr/local/ca/server-cert.pem --tlskey=/usr/local/ca/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
现在的话:
1.13.1版本的docker, ExecStart
属性值比原博客的多了一些,
只把 /usr/bin/dockerd 后面的部分:
--tlsverify --tlscacert=/usr/local/ca/ca.pem --tlscert=/usr/local/ca/server-cert.pem --tlskey=/usr/local/ca/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
加进去就行
效果就像我截的图这样。
如果一开始的目录有更改,这里也要跟着改。其实之前有复制到 /etc/docker , 用那个目录也行。
(16)重新加载daemon并重启docker
systemctl daemon-reload
systemctl restart docker
测试:
使用idea的docker插件
1.协议头 TCP -> HTTPS
2.端口号用第(15)步指定的端口,如:-H tcp://0.0.0.0:2375 是2375,-H tcp://0.0.0.0:34560 是34560
3.把第(1)步文件夹里的东西都拷到一个本地目录,证书文件夹就选那个目录。
插件位置: