Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >CoreOS配置Docker API TLS认证 顶

CoreOS配置Docker API TLS认证 顶

作者头像
bdcn
发布于 2018-09-12 06:52:19
发布于 2018-09-12 06:52:19
2.5K00
代码可运行
举报
文章被收录于专栏:bdcnbdcn
运行总次数:0
代码可运行

我们经常会利用Portainer来管理docker环境,也经常会用Jenkins来自动构建和部署docker,远程管理都会使用到Docker API,通常我们只是开启了没有安全保护的2375(通常)端口,这个比较危险,会导致远程劫持攻击。那么我们就需要配置TLS认证的2376(通常)端口。

下面我们针对CoreOS系统进行配置:

一、利用系统自带的openssl生成相应的服务端和客户端证书

我们利用脚本自动生成,这样非常便捷,脚本(auto-tls-certs.sh)如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
# 
# -------------------------------------------------------------
# 自动创建 Docker TLS 证书
# -------------------------------------------------------------

# 以下是配置信息
# --[BEGIN]------------------------------

CODE="dp"
IP="docker服务器ip"
PASSWORD="证书密码"
COUNTRY="CN"
STATE="BEIJING"
CITY="BEIJING"
ORGANIZATION="公司"
ORGANIZATIONAL_UNIT="Dev"
COMMON_NAME="$IP"
EMAIL="邮箱"

# --[END]--

# Generate CA key
openssl genrsa -aes256 -passout "pass:$PASSWORD" -out "ca-key-$CODE.pem" 4096
# Generate CA
openssl req -new -x509 -days 365 -key "ca-key-$CODE.pem" -sha256 -out "ca-$CODE.pem" -passin "pass:$PASSWORD" -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$COMMON_NAME/emailAddress=$EMAIL"
# Generate Server key
openssl genrsa -out "server-key-$CODE.pem" 4096

# Generate Server Certs.
openssl req -subj "/CN=$COMMON_NAME" -sha256 -new -key "server-key-$CODE.pem" -out server.csr

echo "subjectAltName = IP:$IP,IP:127.0.0.1" >> extfile.cnf
echo "extendedKeyUsage = serverAuth" >> extfile.cnf

openssl x509 -req -days 365 -sha256 -in server.csr -passin "pass:$PASSWORD" -CA "ca-$CODE.pem" -CAkey "ca-key-$CODE.pem" -CAcreateserial -out "server-cert-$CODE.pem" -extfile extfile.cnf


# Generate Client Certs.
rm -f extfile.cnf

openssl genrsa -out "key-$CODE.pem" 4096
openssl req -subj '/CN=client' -new -key "key-$CODE.pem" -out client.csr
echo extendedKeyUsage = clientAuth >> extfile.cnf
openssl x509 -req -days 365 -sha256 -in client.csr -passin "pass:$PASSWORD" -CA "ca-$CODE.pem" -CAkey "ca-key-$CODE.pem" -CAcreateserial -out "cert-$CODE.pem" -extfile extfile.cnf

rm -vf client.csr server.csr

chmod -v 0400 "ca-key-$CODE.pem" "key-$CODE.pem" "server-key-$CODE.pem"
chmod -v 0444 "ca-$CODE.pem" "server-cert-$CODE.pem" "cert-$CODE.pem"

# 打包客户端证书
mkdir -p "tls-client-certs-$CODE"
cp -f "ca-$CODE.pem" "cert-$CODE.pem" "key-$CODE.pem" "tls-client-certs-$CODE/"
cd "tls-client-certs-$CODE"
tar zcf "tls-client-certs-$CODE.tar.gz" *
mv "tls-client-certs-$CODE.tar.gz" ../
cd ..
rm -rf "tls-client-certs-$CODE"

# 拷贝服务端证书
mkdir -p /etc/docker/certs.d
cp "ca-$CODE.pem" "server-cert-$CODE.pem" "server-key-$CODE.pem" /etc/docker/certs.d/

对脚本中的变量进行修改后运行,自动会创建好tls证书,服务器的证书在/etc/docker/certs.d/目录下:

客户端的证书在运行脚本的目录下,同时还自动打好了一个.tar.gz的包,很方便。

二、配置Docker服务(官方说明)

注意修改证书路径。

Enable the secure remote API on a new socket

Create a file called /etc/systemd/system/docker-tls-tcp.socket to make Docker available on a secured TCP socket on port 2376.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Unit]
Description=Docker Secured Socket for the API

[Socket]
ListenStream=2376
BindIPv6Only=both
Service=docker.service

[Install]
WantedBy=sockets.target

Then enable this new socket:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl enable docker-tls-tcp.socket
systemctl stop docker
systemctl start docker-tls-tcp.socket

Drop-in configuration

Create /etc/systemd/system/docker.service.d/10-tls-verify.conf drop-in for systemd Docker service:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[Service]
Environment="DOCKER_OPTS=--tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server.pem --tlskey=/etc/docker/server-key.pem"

Reload systemd config files and restart docker service:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl daemon-reload
sudo systemctl restart docker.service

三、配置Portainer远程TLS连接

证书对应选择:

  1. ca.pem
  2. cert.pem
  3. key.pem

这样就完成了。注意如果之前开启了未认证的2375端口,请关闭并禁用,重启docker服务。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 停止不安全的2375端口
systemctl stop docker-tcp.socket

# 禁用该端口
systemctl disable docker-tcp.socket

# 重启docker服务
systemctl restart docker.service
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
快速上手docker-java,示例全网最全,带你踩坑,带你飞
刚入项目组,就开始用dokcer-java去干活了,由于之前没接触过,所以就开始全网找资料,于是乎,找了一堆博客,好像都差不多,虽然都能跑起来,但是我的需求并没有得以实现:
AI码师
2022/09/19
4.2K1
快速上手docker-java,示例全网最全,带你踩坑,带你飞
Linux开启Docker远程访问并设置安全访问(证书密钥),附一份小白一键设置脚本哦!
找到 Service节点,修改ExecStart属性,增加 -H tcp://0.0.0.0:2375
JanYork_简昀
2023/02/02
4.4K0
Linux开启Docker远程访问并设置安全访问(证书密钥),附一份小白一键设置脚本哦!
Docker 远程连接 -- dockerd 命令详解
配置 TLS 实现安全的 Docker 远程连接。 GitHub:https://github.com/khs1994-docker/dockerd-tls 本机:macOS 远程机:使用 VirtualBox 虚拟 CoreOS (IP 192.168.57.110) 目标:能在 macOS 远程操作 CoreOS。(注意不是 SSH 远程登录)。dockerd 命令仅能在 Linux 下使用。 官方文档:https://docs.docker.com/edge/engine/reference/comm
康怀帅
2018/02/28
24.5K2
docker remote api 加密
1. 设置主机名 编辑/etc/hostname,服务器主机名 zouyujie.top
用户9347382
2022/01/10
5880
centos7/6.9 docker-ce-17/1.7.1使用证书登陆(openssl tls)
出现 Error response from daemon: client is newer than server (client API version: 1.24, server API version: 1.19)
全栈程序员站长
2021/05/19
2760
Docker启用TLS进行安全配置
之前开启了docker的2375 Remote API,接到公司安全部门的要求,需要启用授权,翻了下官方文档
JadePeng
2019/08/14
8770
TLS加密远程连接Docker
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
程序员欣宸
2019/09/18
2.2K0
TLS加密远程连接Docker
04. Idea集成Docker
上一节中,我们介绍了Dockerfile的方式构建自己的镜像。但是在实际开发过程中,一般都会和开发工具直接集成,如Idea。今天就介绍下idea和Docker如何集成。
有一只柴犬
2023/08/24
5000
04. Idea集成Docker
docker开放2375端口,并添加安全传输层协议(TLS)和CA认证
为了更便捷地打包和部署,服务器需要开放2375端口才能连接docker,但如果开放了端口没有做任何安全保护,会引起安全漏洞,被人入侵、挖矿、CPU飙升这些情况都有发生,任何知道你IP的人,都可以管理这台主机上的容器和镜像,非常不安全。
全栈程序员站长
2022/09/07
2.2K0
docker开放2375端口,并添加安全传输层协议(TLS)和CA认证
Docker开启远程安全访问
找到 Service 节点,修改 ExecStart 属性,增加 -H tcp://0.0.0.0:2375
niceyoo
2020/07/09
9.8K0
这就是你日日夜夜想要的docker!!!---------TLS加密远程连接Docker
作为一款应用 Docker 本身实现上会有代码缺陷。CVE官方记录 Docker 历史版本共有超过20项漏洞。 黑客常用的攻击手段主要有代码执行、权限提升、信息泄露、权限绕过等。目前 Docker版本更迭非常快,Docker 用户最好将 Docker 升级为最新版本。
不吃小白菜
2020/09/28
7790
这就是你日日夜夜想要的docker!!!---------TLS加密远程连接Docker
在Ubuntu16.10上开启docker17.03.0-ce的https认证
$ openssl genrsa -aes256 -out ca-key.pem 4096
cn華少
2018/09/11
3530
Docker开启TLS和CA认证
前言:Docker直接开启2375端口是不安全的,别人只要连上之后就可以任意操作,下面是开启Docker的TLS和CA认证方法,并使用Jenkins和Portainer连接。 一、生成证书 查看服务器主机名 hostname [image-20210826174816658] 安装生成证书软件 yum install -y openssl [image-20210827003357785] 编写一键启动脚本 auto-generate-docker-tls-ca.sh # !/bin/bash # 一键生
小强崽
2022/05/20
1.6K0
docker开启api访问,配置双向证书验证
Docker是一种容器化技术,可通过容器化技术提供的API进行访问和管理。您可以通过配置Docker API来开启对Docker API的访问,并使用双向证书验证确保通信的安全性。以下是配置Docker API以开启访问和双向证书验证的步骤:
堕落飞鸟
2023/03/31
1.7K0
harbor搭建企业docker私有镜像仓库
# curl -fsSL https://get.docker.com/ | sh
聂伟星
2020/07/12
2.6K0
为GRPC证书加入双向证书认证如此简单
上一篇文章我们讲解了怎么给 GRPC 配置添加单向证书认证,这一篇我接着分享,如何让 GRPC 服务加入双向证书认证。
小锟哥哥
2022/05/10
1.8K0
为GRPC证书加入双向证书认证如此简单
Docker服务开放了这个端口,服务器分分钟变肉机!
Docker为了实现集群管理,提供了远程管理的端口。Docker Daemon作为守护进程运行在后台,可以执行发送到管理端口上的Docker命令。
macrozheng
2020/08/13
1.5K0
Golang(十一)TLS 相关知识(二)OpenSSL 生成证书
0. 前言 接前一篇文章,上篇文章我们介绍了数字签名、数字证书等基本概念和原理 本篇我们尝试自己生成证书 参考文献:TLS完全指南(二):OpenSSL操作指南 1. OpenSSL 简介 OpenSSL 是一个开源项目,其组成主要包括三个组件: openssl:多用途的命令行工具 libcrypto:加密算法库 libssl:加密模块应用库,实现了ssl及tls OpenSSL 主要用于秘钥证书管理、对称加密和非对称加密 1.1 指令 常用指令包括:genrsa、req、x509 1.1.1 genrs
西凉风雷
2022/11/23
2.3K0
https原理以及golang基本实现
大致上分为两类,基于key的加密算法与不基于key的加密算法。现在的算法基本都是基于key的,key就以一串随机数数,更换了key之后,算法还可以继续使用。
我的小碗汤
2018/08/22
9310
docker基础:私库系列:再探Harbor:(4) https方式的私库管理
在前面的介绍中,缺省使用了http的方式,而考虑安全的角度,容器的仓库在生产环境中往往被设定为https的方式,而harbor将这些证书的创建和设定都进行了简单的集成,这篇文章来看一下在harbor下如何使用https的方式。
全栈程序员站长
2022/09/09
2930
推荐阅读
相关推荐
快速上手docker-java,示例全网最全,带你踩坑,带你飞
更多 >
LV.0
北京成来数据处理有限公司技术合伙人
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验