docker给2376连接端口设置CA证书详细过程

问题的出现

因为docker 默认是root 权限,允许所有人访问,直接把2375端口暴露在外网相当于直接把服务器的root 权限拱手送人,因此我们需要构建一个加密的TCP链接,以Https的方式连接到远程的docker 服务器

如何修复该漏洞

如果要安全的管理远程Docker主机,应该怎么做呢?其实,Docker本身提供了加密的远程管理端口2376,配合CA证书,就能提供TLS连接了。

首先要准备5个证书和秘钥文件,分别是ca.pem、server-cert.pem、server-key.pem、client-cert.pem和client-key.pem。其中,server-cert.pem中限制了能够访问Docker主机的客户端列表。

启动Docker Deamon时,需要设置-H、–tls、–tlscacert=ca.pem、–tlscert=server-cert.pem和–tlskey=server-key.pem。此时,只有客户端列表中的主机能够访问Docker主机。

1.创建一个ca 的文件夹

mkdir -p /usr/local/ca
cd /usr/local/ca

2.创建一个ca-key.pem

sudo openssl genrsa -aes256 -out ca-key.pem 4096
这个操作会提示你需要输入密码和确认密码,请记住这个密码

3.创建ca.pem 填写一些基本的信息

sudo openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
这些信息可以随便填写不用太在意 实在有选择困难症的可以参考我的 填写方式
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Hangzhou, Zhejiang Province, People's Republic of China
Locality Name (eg, city) [Default City]:XIACHENG
Organization Name (eg, company) [Default Company Ltd]:WRETCHANT.COM
Organizational Unit Name (eg, section) []:ONLINE ZUOZUO
Common Name (eg, your name or your server's hostname) []:wretchant

4.生成server-key.pem

sudo openssl genrsa -out server-key.pem 4096

5.绑定IP或者域名(这里的$HOST是你的服务器的外网IP)

sudo openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
这里可能会报一个错
Can't load /home/lzj/.rnd into RNG 140679038767552:error:2406F079
:random number generator:RAND_load_file:Cannot open file:../crypto
/rand/randfile.c:88:Filename=/home/lzj/.rnd
解决方法
//进入上面所提及的Can't load的目录
cd /home/lzj
sudo openssl rand -writerand .rnd

6.配置白名单($HOST 就是你第5步设置的那个 $HOST)

echo subjectAltName = IP:$HOST,IP:0.0.0.0 >> extfile.cnf
你如果希望只有指定的IP能够访问的话,请把0.0.0.0 改为指定IP,不过一般情况下,个人的网络是没有固定的公网IP的,所以建议设置成0.0.0.0,但是需要证书才能访问

7.生成server-cert.pem

echo extendedKeyUsage = serverAuth >> extfile.cnf
sudo 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-key.pem的那个密码

8.创建key.pem

sudo openssl genrsa -out key.pem 4096

9.创建client.csr(客户端签名请求需要用到的临时文件)

sudo openssl req -subj '/CN=client' -new -key key.pem -out client.csr

echo extendedKeyUsage = clientAuth >> extfile.cnf

10.生成cert.pem

sudo openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out cert.pem -extfile extfile.cnf

11.修改证书为只读权限保证证书安全

sudo chmod -v 0400 ca-key.pem key.pem server-key.pem
sudo chmod -v 0444 ca.pem server-cert.pem cert.pem

12.删除生成的临时文件

sudo rm -rf client.csr server.csr

13.把证书复制到docker配置目录下

cp server-*.pem  /etc/docker/
cp ca.pem /etc/docker/

14.修改docker.service

sudo vim /lib/systemd/system/docker.service
把里面的ExecStart值设置为下面
/usr/bin/dockerd --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 -H unix:///var/run/docker.sock

15.重启docker

···shell
systemctl daemon-reload
systemctl restart docker
service docker restart
···

16.下载连接所需的证书文件

在这里插入图片描述

把这三个文件放入一个文件夹中

17.idea配置

在这里插入图片描述

在certificates folder指向你放三个证书的文件夹
默认是tcp 的,你要改成https,端口检查一下
如果显示是successful就代表链接成功
这里如果你是出现这个错误

在这里插入图片描述

原因基本是证书配置的问题,要好好检查一下配置过程
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值