Docker基础系列之TLS和CA认证
Docker基础系列之TLS和CA认证
文章目录
- Docker基础系列之TLS和CA认证
- 1. 引言
- 2. 初识TLS和CA
- 3. 开启TLS和CA认证
- 3.1 生成证书
- 3.2 配置TLS
- 4. 参考和感谢
1. 引言
我们日常工作当中会遇到这些需求:
- 监控Docker容器
- 在idea开发工具中连接Docker,直接发布至服务器
- Jenkins连接Docker
为了更便捷地连接Docker服务器,Docker服务器需要开放2375端口才能连接docker,但如果开放了端口没有做任何安全保护,会引起安全漏洞,被人入侵、挖矿、CPU飙升这些情况都有发生,任何知道你IP的人,都可以管理这台主机上的容器和镜像,非常不安全,这个时候TLS和CA就闪亮登场。。。
2. 初识TLS和CA
Docker TLS(Transport Layer Security)和 CA(Certificate Authority)是用于加密和认证 Docker 守护进程与客户端之间通信的一种机制。
-
TLS(Transport Layer Security):
- TLS 是一种加密通信协议,用于确保通信过程中的数据传输安全。
- 在 Docker 中,TLS 可以用于加密 Docker 守护进程与客户端(如 Docker CLI、Docker Compose 等)之间的通信,以防止数据在传输过程中被窃取或篡改。
-
CA(Certificate Authority):
- CA 是证书颁发机构的缩写,负责签发和管理数字证书。
- 在使用 TLS 加密通信时,CA 用于签发和管理用于认证通信双方身份的数字证书。
- 在 Docker 中,CA 通常会签发 Docker 守护进程和客户端之间通信所需的数字证书,用于认证双方的身份,确保通信的安全性。
在配置 Docker TLS 时,通常会生成一组证书和私钥,并使用 CA 签名这些证书,然后将这些证书分发给 Docker 守护进程和客户端。客户端使用证书与私钥来进行身份验证,而 Docker 守护进程使用 CA 颁发的证书验证客户端的身份。这样就建立了一种安全的通信机制,确保 Docker 守护进程与客户端之间的通信是加密的、受信任的。
3. 开启TLS和CA认证
3.1 生成证书
- 生成CA证书的shell脚本
创建证书存放目录
# /mydata/cert/docker这个目录改了下面相关都得改 自己替换 mkdir -p /mydata/cert/script /mydata/cert/docker #cert文件目录
查看服务器主机名
hostname
创建脚本文件
vim /mydata/cert/script/auto-cert.sh #编辑脚本
脚本命令如下:
#!/bin/bash# 一键生成TLS和CA证书# Create : 2024-03-27
# Update : 2024-03-27
# @Autor : xiaomuchong# 服务器主机名
SERVER="Docker110"
# 密码
PASSWORD="xmc@2011"
# 国家
COUNTRY="CN"
# 省份
STATE="四川省"
# 城市
CITY="成都市"
# 机构名称
ORGANIZATION="佳缘科技"
# 机构单位
ORGANIZATIONAL_UNIT="医疗事业部"
# 邮箱
EMAIL="17501123@qq.com"
# 创建ca证书目录
mkdir -p /mydata/cert/docker
# 进入ca证书目录
cd /mydata/cert/docker# 生成CA密钥
openssl genrsa -aes256 -passout pass:$PASSWORD -out ca.pem 2048# 生成CA证书
openssl req -new -x509 -passin "pass:$PASSWORD" -days 3650 -key ca.pem -sha256 -out ca-cert.pem -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$SERVER/emailAddress=$EMAIL"# 生成服务端密钥
openssl genrsa -out server-key.pem 2048# 生成服务端证书签名的请求文件
openssl req -subj "/CN=$SERVER" -new -key server-key.pem -out server-req.csr# 生成服务端证书
openssl x509 -req -days 3650 -in server-req.csr -CA ca-cert.pem -CAkey ca.pem -passin "pass:$PASSWORD" -CAcreateserial -out server-cert.pem# 生成客户端密钥
openssl genrsa -out key.pem 2048# 生成客户端证书签名的请求文件
openssl req -subj '/CN=client' -new -key key.pem -out client-req.csr# 生成客户端证书
sh -c 'echo "extendedKeyUsage=clientAuth" >> extfile.cnf'
openssl x509 -req -days 3650 -in client-req.csr -CA ca-cert.pem -CAkey ca.pem -passin "pass:$PASSWORD" -CAcreateserial -out cert.pem -extfile extfile.cnf# 更改密钥权限
chmod 0400 ca.pem server-key.pem key.pem
# 更改证书权限
chmod 0444 ca-cert.pem server-cert.pem cert.pem
# 删除无用文件
rm ca-cert.srl client-req.csr server-req.csr extfile.cnf
加入脚本命令保存
- 赋予执行权限
chmod +x auto-cert.sh
- 执行
./auto-cert.sh
- 生成的文件说明
ca.srl:CA签发证书的序列号记录文件
ca-key.pem:CA密钥
ca.pem:CA证书server-req.csr:服务端证书签名请求文件
server-key.pem:服务端密钥
server-cert.pem:服务端证书client-req.csr:客户端证书签名请求文件
extfile.cnf:客户端证书扩展配置文件
key.pem:客户端密钥
cert.pem:客户端证书
- 另外还可以采用交互式shell脚本生成证书(上述两种方式任选其一),脚本如下:
#!/bin/bash
if [ -z $1 ];then
echo '请输入服务器ip'
exit 0
fi
HOST=$1
# 创建证书存放目录
mkdir -p /mydata/cert/docker
cd /mydata/cert/docker# 生成CA密钥
openssl genrsa -aes256 -out ca-key.pem 4096
# 生成CA证书
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem# 生成服务端密钥
openssl genrsa -out server-key.pem 4096
# 生成服务端证书签名的请求文件
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
# 配置白名单,推荐配置0.0.0.0,允许所有IP连接但只有证书才可以连接成功
echo subjectAltName = DNS:$HOST,IP:$HOST,IP:0.0.0.0,IP:127.0.0.1 > extfile.cnf
# 生成服务端证书
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf# 生成客户端密钥
openssl genrsa -out key.pem 4096
# 生成客户端证书签名的请求文件
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth > extfile.cnf
# 生成客户端证书
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf# 更改密钥权限
chmod -v 0400 ca-key.pem key.pem server-key.pem
# 更改证书权限
chmod -v 0444 ca.pem server-cert.pem cert.pem# 删除无用文件
rm -v client.csr server.csr
3.2 配置TLS
# 编辑文件(有的在这个位置:/usr/lib/systemd/system/docker.service)
vim /etc/systemd/system/docker.service# 修改内容,注意证书的指定位置
ExecStart=/usr/bin/dockerd \
--tlsverify \
--tlscacert=/mydata/cert/docker/ca-cert.pem \
--tlscert=/mydata/cert/docker/server-cert.pem \
--tlskey=/mydata/cert/docker/server-key.pem \
-H unix:///var/run/docker.sock \
-H tcp://0.0.0.0:2375# 重启服务
systemctl daemon-reload && systemctl restart docker
/etc/systemd/system/docker.service
和 /usr/lib/systemd/system/docker.service
都是 Docker 服务的 systemd 单元文件,但它们的作用和使用方式略有不同:
-
/etc/systemd/system/docker.service:
- 这个路径下的文件是系统管理员或用户自定义的 systemd 单元文件,通常用于覆盖默认的 Docker 服务配置。
- 系统管理员或用户可以在此文件中定义自己的 Docker 服务配置,如修改默认的启动参数、环境变量等。
- 当存在
/etc/systemd/system/docker.service
文件时,系统会优先使用该文件中定义的配置启动 Docker 服务,而不是使用默认的/usr/lib/systemd/system/docker.service
文件。 - 这种方式允许用户在不修改系统提供的默认配置的情况下,自定义 Docker 服务的行为。
-
/usr/lib/systemd/system/docker.service:
- 这个路径下的文件是 Docker 软件包提供的默认 systemd 单元文件,用于定义 Docker 服务的启动参数、环境变量等默认配置。
- 这个文件通常由 Docker 软件包安装程序提供,并且在安装 Docker 软件包时会自动创建。
- 如果系统中不存在
/etc/systemd/system/docker.service
文件,那么 Docker 服务会使用这个默认的 systemd 单元文件进行启动。 - 一般情况下,不建议直接修改这个文件,因为它可能会在 Docker 软件包的升级过程中被覆盖或修改。
总体来说,/etc/systemd/system/docker.service
文件用于用户自定义 Docker 服务的配置,而 /usr/lib/systemd/system/docker.service
文件是 Docker 软件包提供的默认配置文件。
4. 参考和感谢
Docker开启TLS和CA认证, 解决暴露2375端口引发的安全漏洞, 并使用idea连接并推送镜像
Docker开启TLS和CA认证
相关文章:

Docker基础系列之TLS和CA认证
Docker基础系列之TLS和CA认证 文章目录 Docker基础系列之TLS和CA认证1. 引言2. 初识TLS和CA3. 开启TLS和CA认证3.1 生成证书3.2 配置TLS 4. 参考和感谢 1. 引言 我们日常工作当中会遇到这些需求: 监控Docker容器在idea开发工具中连接Docker,直接发布至…...

总结:微信小程序中跨组件的通信、状态管理的方案
在微信小程序中实现跨组件通信和状态管理,有以下几种主要方案: 事件机制 通过事件机制可以实现父子组件、兄弟组件的通信。 示例: 父组件向子组件传递数据: 父组件: <child binddata"handleChildData" /> 子组件: Component({..., methods: { handleChildData(…...

企业能耗数据分析有哪些优势?怎样进行分析?
随着互联网技术的发展,企业在运营中会出现大量的用能数据,但却做不了精准的用能数据分析,导致数据没有得到有效利用,以及产生能源浪费现象。 为什么企业用能分析总是难? 一、用能分析过程复杂 由于用能分析过于复杂…...

containerd配置HTTP私仓
文章目录 1. 🛠️ 基础环境配置2. 🐳 Docker安装3. 🚢 部署Harbor,HTTP访问4. 📦 部署ContainerD5. 🔄 修改docker配置文件,向harbor中推入镜像6. 配置containerd6.1. 拉取镜像验证6.2. 推送镜像…...

掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)
在Go语言中,类型转换指的是将一个数据类型的值转换为另一个数据类型的过程。Go语言中的类型转换通常用于将一种数据类型转换为另一种数据类型,以满足特定操作或需求。 类型转换的基本语法 在Go语言中,类型转换的基本语法为: ne…...

Chatgpt掘金之旅—有爱AI商业实战篇|文案写作|(三)
演示站点: https://ai.uaai.cn 对话模块 官方论坛: www.jingyuai.com 京娱AI 一、前言 人工智能(AI)技术作为当今科技创新的前沿领域,为创业者提供了广阔的机会和挑战。随着AI技术的快速发展和应用领域的不断拓展&…...

c++20 的部分新概念及示例代码-Contracts,Ranges
C20 引入了 contracts(契约),这是一种编程范式,它允许程序员在代码中添加先决条件(preconditions)、后置条件(postconditions)和断言(assertions)等契约&…...

pytorch剪枝
原文:https://blog.51cto.com/u_16213398/10059574 Pytorch剪枝实现指南 指南概述 在这篇文章中,我将向你介绍如何在PyTorch中实现模型剪枝。剪枝是一种优化模型的技术,可以帮助减少模型的大小和计算量,同时保持模型的准确性。…...

马斯克旗下xAI发布Grok-1.5,相比较开源的Grok-1,各项性能大幅提升,接近GPT-4!
本文原文来自DataLearnerAI官方网站:马斯克旗下xAI发布Grok-1.5,相比较开源的Grok-1,各项性能大幅提升,接近GPT-4! | 数据学习者官方网站(Datalearner) 继Grok-1开源之后,xAI宣布了Grok-1.5的内测消息&…...

数据结构与算法 顺序串的基本运算
一、实验内容 编写一个程序sqstring.cpp,实现顺序串的各种基本运算,并在此基础上实现一个程序exp7.cpp,完成以下功能: (1)建立串s“abcdefghefghijklmn”和串s1“xyz” (2)输出串…...

2024年04月数据库流行度最新排名
点击查看最新数据库流行度最新排名(每月更新) 2024年04月数据库流行度最新排名 TOP DB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的 一个数据库被搜索的次数越多,这个数据库就被认为越受欢迎。这是一个领先指标。原始数…...

golang语言系列:SOLID、YAGNI、KISS等设计原则
云原生学习路线导航页(持续更新中) 本文是 golang语言系列 文章,主要对编程通用技能 SOLID、YAGNI、KISS等设计原则 进行学习 1.SOLID设计原则 S:SRP,单一职责原则O:OCP,开闭原则L:…...

Meta Pixel:助你实现高效地Facebook广告追踪
Meta Pixel 像素代码是用來衡量Facebook广告效果的一个官方数据工具,只要商家有在Facebook上投放广告就需要串联Meta Pixel 像素代码来查看相关数据。 它本质上是一段 JavaScript 代码,安装后可以让用户在自己网站上查看到访客活动。它的工作原理是加载…...

基于Arduino IDE 野火ESP8266模块 文件系统LittleFS 的开发
一、文件系统LittleFS的介绍 LittleFS是一个为微控制器设计的轻量级、可靠且高性能的文件系统。它专为嵌入式设备打造,拥有占用空间小、对硬件要求低的特点,同时保证在断电情况下数据的完整性和稳定性。 1.设计与特点 LittleFS的设计旨在提供嵌入式系统所…...

通讯录改造———文件版本
上一篇文章我们详细讲了文件操作,这时候我们就可以把通讯录保存到文件中,这样即使程序退出了,联系人的信息也还是保存着,下一次启动程序时我们就可以把文件中的数据读取到程序中来使用。 保存 首先我们要在退出通讯录之前把联系人…...

FastAPI Web框架教程 第13章 WebSocket
13-1 WebSocket是什么 WebSocket简介: WebSocket是一种在单个TCP连接上进行全双工通信的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。 在WebSocket API中,浏览器和服务器只需要完成一…...

将 Elasticsearch 向量数据库引入到数据上的 Azure OpenAI 服务(预览)
作者:来自 Elastic Aditya Tripathi Microsoft 和 Elastic 很高兴地宣布,全球下载次数最多的向量数据库 Elasticsearch 是公共预览版中 Azure OpenAI Service On Your Data 官方支持的向量存储和检索增强搜索技术。 这项突破性的功能使你能够利用 GPT-4 …...

SeLinux 常见的宏
在SeLinux框架中,google定义好了一些宏,我们使用这些宏,开发时可以更加方便。大部分的宏是定义在te_macros文件中 type_transition type_transition source_type target_type : class default_type当主体进程域source_type 对target_type 类…...

图解PyTorch中的torch.gather函数和 scatter 函数
前言 torch.gather在目前基于 transformer or query based 的目标检测中,在最后获取目标结果时,经常用到。 这里记录下用法,防止之后又忘了。 介绍 torch.gather 官方文档对torch.gather()的定义非常简洁 定义:从原tensor中获…...

Pytorch实用教程: torch.tensor()的用法
在PyTorch中,torch.tensor()函数是用来创建张量(Tensor)的一个非常基础和重要的函数。张量是PyTorch中的基本数据结构,用于存储和操作数据,可以看作是一个高维数组。torch.tensor()函数可以从数据创建新的张量…...

Java设计模式详解:工厂模式
Java设计模式详解:工厂模式 文章目录 Java设计模式详解:工厂模式前言一、工厂模式是个啥?二、工厂模式怎么用?三、工厂模式啥时候用?四、工厂模式的优点总结 前言 今天咱们来聊聊设计模式中的一位重要成员——工厂模式…...

Python爬虫:爬虫常用伪装手段
目录 前言 一、设置User-Agent 二、设置Referer 三、使用代理IP 四、限制请求频率 总结 前言 随着互联网的快速发展,爬虫技术在网络数据采集方面发挥着重要的作用。然而,由于爬虫的使用可能会对被爬取的网站造成一定的压力,因此&#…...

【数据结构】非线性结构---二叉树
1、树 1.1 树的相关概念 节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6 叶节点或终端节点:度为0的节点称为叶节点; 如上图:B、C、H、I...等节点为叶节点 非终端节点或分支节点&#…...

【战略前沿】与中国达成生产协议后,飞行汽车即将起飞
【原文】Flying cars edge towards takeoff after Chinese production deal 【作者】Thomas Macaulay 斯洛伐克公司KleinVision签署了一项协议,将大规模生产AirCar。 一辆获得航空认证的飞行汽车向商业化又迈出了一大步。 空中汽车的创造者KleinVision今天宣布出售…...

谷粒商城实战(007 压力测试)
Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强 总时长 104:45:00 共408P 此文章包含第141p-第p150的内容 简介 安装jmeter 安装jmeter 使用中文 这样写就是200个线程循环100次 一共是2万个请求 介绍线程组 添加请求 可以是htt…...

使用CSS计数器,在目录名称前加上了序号,让目录看起来更加井然有序
目录(Text of Contents缩写为TOC),其实就是一篇文章的概要或简述。这好比,去书店买书,先是被这本书的标题所吸引,而后我们才会,翻开这本书目录,看看这本书主要是在讲些什么ÿ…...

SSH常见运维总结
1 -bash: ssh: command not found 解决办法:"yum install -y openssh-server openssh-clinets" 2 ssh登录时提示:Read from socket failed: Connection reset by peer. 原因:/etc/ssh/下没有ssh*key*文件 解决&…...

uni app 扫雷
闲来无聊。做个扫雷玩玩吧,点击打开,长按标记,标记的点击两次或长按取消标记。所有打开结束 <template><view class"page_main"><view class"add_button" style"width: 100vw; margin-bottom: 20r…...

MATLAB绘制堆叠填充图--巧用句柄
MATLAB绘制堆叠填充图–巧用句柄 目录 MATLAB绘制堆叠填充图--巧用句柄1. 主要原理讲解1.1 主要函数1.2 句柄原理 2. 绘图示例2.1 准备数据2.2 绘制堆叠填充图-使用句柄控制图形属性2.3 设置填充颜色和样式2.4 添加标题和标签2.5 绘图效果 3. 结语 堆叠填充图是一种常见的数据可…...

JQuery的定义
jQuery是一个js库,使用jQuery会比js简单一点 jQuery文件是一个自执行函数 jQuery文件是一个自执行函数 $传递的参数不同,效果也不同: 传递的是匿名函数,那$就是一个入口函数,传递的是一个字符串,那$就…...