【docker系列】docker API管理接口增加CA安全认证
前文中我们曾经介绍过《使用IDEA远程工具》连接Docker REST API,我们会发现一个问题,任何知道Docker 服务器IP、端口的第三方都可以访问这个API,非常的不安全。为了保证Docker API的安全性,我们有必要使用数字证书进行安全验证。
- 为docker服务端配置服务端证书,用于验证客户端请求
- 为访问docker 服务的客户端配置客户端证书,用于验证服务端发送的交互信息的安全性。
如果只在自己公司内部使用到数字证书,就没有必要花钱向专业的CA机构进行认证授权(价格不菲),采用自生成的CA证书在公司内部使用也是完全可以的。下图是CA证书及子证书的签发过程,请结合文章进行理解。
文章目录
- 一、模拟创建CA证书(中间边框的部分)
- 二、签发服务器端证书(右边蓝色背景部分)
- 三、签发客户端证书(左边黄色背景的部分)
- 四、签发证书收尾工作
- 五、配置docker服务端
- 六、IDEA配置使用客户端证书
一、模拟创建CA证书(中间边框的部分)
正常情况下CA机构有自己的私钥,因为我们是模拟CA机构,所以这个私钥需要我们自己创建。执行下文中的命令,输入2次密码(密码务必记住,后文中需要使用),执行完命令之后,当前目录下生成一个ca-key.pem
文件(上图中红色背景代表)。
# openssl genrsa -aes256 -out ca-key.pem 4096
Generating 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
然后提示需要输入国家、省份、地市、公司、组织、服务器地址或域名、邮箱联系方式,其中国家和服务器地址或域名要填上,否则后续无法使用。
# 国家:CN
Country 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
创建服务器端CSRserver.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
创建客户端CSRclient.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
四、签发证书收尾工作
删除证书签发请求文件,已经失去用处。
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 -dates
notBefore=Apr 10 01:17:55 2022 GMT
notAfter=Apr 7 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://<ip>:2375
,记住是https,不是http,也不是tcp - 将客户端的需要的三个证书文件ca.pem、cert.pem、key.pem放入一个目录下,并使选择该目录作为Certificates folder。
【docker系列】docker API管理接口增加CA安全认证相关推荐
- Docker系列 搭建密码管理应用bitwarden
转至我的个人博客:https://blognas.hwb0307.com.欢迎关注! 前言 根据Docker系列 两大神器Nginx proxy manager (NPM)和ddns-go的安装的教程 ...
- Docker系列---docker cgroup资源管理 | TLS通讯加密 | 详细讲解
Cgroup 前言 - Cgroup 一.对 CPU 的控制 1.使用 stress 工具测试 2.限制 CPU 使用周期速率 3.多任务比例分享 CPU 4.限制 CPU 内核使用 二.对内存使用的 ...
- 【IT之路】Docker系列-Docker容器下载、使用示例
1.在指定容器执行操作(这里使用的是ubuntu 15.10版本容器,如果当前没有这个容器,会自动从网上下载) 指定容器执行echo命令,输出"Hello world" 各个参数解 ...
- Docker系列 搭建自动备份服务duplicati
转至我的个人博客:https://blognas.hwb0307.com.欢迎关注! 前言 在Docker系列 搭建密码管理应用bitwarden中,我们安装了一个实用的Docker应用bitward ...
- yapi 接口文档_1分钟docker部署顶尖 API 文档管理系统
YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员提供更优雅的接口管理服务.可以帮助开发者轻松创建.发布.维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.感谢 在此感谢.net ...
- docker启动远程管理接口
默认情况下 Docker 的守护进程启动会生成一个 socket (/var/run/docker.sock)进程通信文件,而并没有监听端口,只能在本机操作 Docker.如果想在其它地方操作 Doc ...
- [Docker系列·8] Docker远程接口
https://docs.docker.com/reference/api/docker_remote_api tends to be REST https://docs.docker.com/art ...
- Docker系列教程09-使用Docker Hub管理镜像
为什么80%的码农都做不了架构师?>>> > 原文:<http://www.itmuch.com/docker/09-docker-docker-hub/> ...
最新文章
- javaScript初学者易错点
- oracle ORA-00911 问题 解决
- Java线上应用故障排查之一:高CPU占用
- Bootstrap框架系列 - 初识
- 别说了,叫爸爸吧! | 今日最佳
- 堆排序python代码实现_python实现堆排序
- arcgis10.1连接sqlserver数据库常见问题(转载)
- python中step什么意思_质量中心:在Python中设置一个Step字段
- 数据迁移其实是很难的
- WAP调用微信支付https://pay.weixin.qq.com/wiki/doc/api/wap.php?chapter=15_1
- 工程笔记阶段1-DAC正弦波实验
- Mac系统新建txt文本文件技巧
- 台式计算机如何组装,怎样组装基本台式机
- Git 初接触 (四) Git的分支操作
- 非负数 正则表达式
- 两个对称正定阵的乘积是正定的吗?
- 微信步数日历打卡小程序
- Java百度识别身份证照片、驾驶证识别
- NLP--2 语言结构和传统pipeline
- 【FFMPEG】AVFrame中buffer分配的两种方式