详解docker|详解docker API管理接口增加CA安全认证
目录
- 一、模拟创建CA证书(中间边框的部分)
- 二、签发服务器端证书(右边蓝色背景部分)
- 三、签发客户端证书(左边黄色背景的部分)
- 四、签发证书收尾工作
- 五、配置docker服务端
- 六、IDEA配置使用客户端证书
- 为docker服务端配置服务端证书,用于验证客户端请求
- 为访问docker 服务的客户端配置客户端证书,用于验证服务端发送的交互信息的安全性。
文章图片
一、模拟创建CA证书(中间边框的部分) 正常情况下CA机构有自己的私钥,因为我们是模拟CA机构,所以这个私钥需要我们自己创建。执行下文中的命令,输入2次密码(密码务必记住,后文中需要使用),执行完命令之后,当前目录下生成一个
ca-key.pem
文件(上图中红色背景代表)。# openssl genrsa -aes256 -out ca-key.pem 4096Generating RSA private key, 4096 bit long moduluse is 65537 (0x10001)Enter pass phrase for ca-key.pem:Verifying - Enter pass phrase for ca-key.pem:
该命令用于创建机构CA证书,执行该命令首先会提示输入密码(上文中设置的)。正常请开给你下,该流程是某公司向CA提机构提交自己公司的相关信息,CA授权机构根据这些信息(审核信息之后)生成一个用于该公司的CA证书(该公司范围的根证书)。
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem
然后提示需要输入国家、省份、地市、公司、组织、服务器地址或域名、邮箱联系方式,其中国家和服务器地址或域名要填上,否则后续无法使用。
# 国家:CNCountry Name (2 letter code) [XX]: CN# 省份: 可以不填,直接回车State or Province Name (full name) []:# 地市:可以不填,直接回车Locality Name (eg, city) [Default City]:# 公司: 可以不填,直接回车Organization Name (eg, company) [Default Company Ltd]:# 组织: 可以不填,直接回车Organizational Unit Name (eg, section) []:# 服务器地址或域名,按要求填写Common Name (eg, your name or your server's hostname) []:192.168.1.111# 邮箱联系方式,可以不填,直接回车Email Address []:
当前目录下生成一个
ca.pem
,该证书就是CA证书二、签发服务器端证书(右边蓝色背景部分) CA证书还可以用于签发子证书(数字证书),下面我们就模拟签发一个服务端证书。仍然需要先创建一个服务器端私钥
server-key.pem
openssl genrsa -out server-key.pem 4096
创建服务器端CSR
server.csr
,该文件作为向授权机构申请签发子证书的申请文件openssl req -subj "/CN=192.168.1.111" -sha256 -new -key server-key.pem -out server.csr
模拟授权机构创建配置文件,
serverAuth
表示服务端证书echo subjectAltName = IP:192.168.1.111,IP:0.0.0.0 >> 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
生成2个文件ca.srl、server-cert.pem,我们需要的是
server-cert.pem
作为服务端CA证书三、签发客户端证书(左边黄色背景的部分) 下面我们就模拟签发一个客户端证书。仍然需要先创建一个客户端私钥
key.pem
openssl genrsa -out key.pem 4096
创建客户端CSR
client.csr
,该文件作为向授权机构申请签发子证书的申请文件openssl req -subj '/CN=client' -new -key key.pem -out client.csr
模拟授权机构创建配置文件,
clientAuth
表示客户端证书echo extendedKeyUsage = clientAuth >> extfile.cnf
执行下列命令同样会提示输入密码,生成2个文件
ca.srl
、cert.pem
,我们需要的是cert.pem
作为客户端证书openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
四、签发证书收尾工作 【详解docker|详解docker API管理接口增加CA安全认证】删除证书签发请求文件,已经失去用处。
rm -v client.csr server.csr
为上文中生成的各种证书授予文件访问权限。
chmod -v 0400 ca-key.pem key.pem server-key.pem; chmod -v 0444 ca.pem server-cert.pem cert.pem;
查看CA证书有效期
# openssl x509 -in ca.pem -noout -datesnotBefore=Apr 10 01:17:55 2022 GMTnotAfter=Apr7 01:17:55 2032 GMT
五、配置docker服务端 然后我们为docker服务端配置证书,分别是ca.pem、server-cert.pem、server-key.pem。将这三个文件放入
/etc/docker/cert/
目录下。mkdir /etc/docker/cert/; cp ./ca.pem ./server-cert.pem ./server-key.pem/etc/docker/cert/;
修改
vim /lib/systemd/system/docker.service
文件中的ExecStart
这一行,修改为如下的一段ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/cert/ca.pem --tlscert=/etc/docker/cert/server-cert.pem --tlskey=/etc/docker/cert/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
修改之后重启docker服务
#重启systemctl daemon-reload && systemctl restart docker
六、IDEA配置使用客户端证书 我们在IDEA docker插件客户端证书配置处做如下选择:“File -> Settings -> Build、Execution、Deployment -> Docker”
文章图片
- Engine API URL的位置写
https://
,记住是https,不是http,也不是tcp:2375 - 将客户端的需要的三个证书文件ca.pem、cert.pem、key.pem放入一个目录下,并使选择该目录作为Certificates folder。
推荐阅读
- Docker运维技术最佳实践|08-Docker 镜像安装实践(MySql数据库,Redis数据库,Nginx代理,Nacos组件)
- docker|Docker Swarm集群搭建以及服务命令等操作
- Caffe卷积神经网络视觉层Vision|Caffe卷积神经网络视觉层Vision Layers及参数详解
- Caffe卷积神经网络solver及其配置详解
- selenium之鼠标操作详解
- flutter 系列之:flutter 中常用的 GridView layout 详解
- Python函数的参数详解
- Java集合详解
- 机器学习和深度学习|RealSense D435 的开发日记(API 汇总)
- docker|Centos 8.2安装docker