Docker配置CA证书和远程访问

2 篇文章 0 订阅
1 篇文章 0 订阅

说明

我遇到过一个坑,为了方便远程管理docker,开放了所有IP对2375端口开放,这样是非常危险的,黑客很容易就能通过端口号进入你的容器,并且无需密码就能获取管理员权限,能对docker发送指令

下面开始快速生成CA证书

1.首先再任意目录创建一个脚本文件,比如叫autogen.sh

touch autogen.sh
vim autogen.sh

编辑内容如下面,根据提示修改[BEGIN]~[END]的内容
IP是必须修改的,其他选改
编辑完成后直接复制下面的内容到autogen.sh中保存

#!/bin/bash
# -------------------------------------------------------------
# 自动创建 Docker TLS 证书
# -------------------------------------------------------------

# config
# --[BEGIN]------------------------------
# 代码,可以随便写
CODE="WRETCHANT"
# 服务器的外网IP
IP="0.0.0.0"
# CA证书的密码
PASSWORD="CAPWDXXX"
# 国家
COUNTRY="CN"
# 地区
STATE="guangdong"
# 城市
CITY="guangzhou"
# 组织
ORGANIZATION="WRETCHANT.EDU"
ORGANIZATIONAL_UNIT="Dev"
COMMON_NAME="$IP"
# 邮件地址
EMAIL="xxx@gmail.com"

# --[END]--

# 创建存放脚本的文件夹
mkdir -p /etc/docker/cert.init/
cd /etc/docker/cert.init/

# Generate CA key
openssl genrsa -aes256 -passout "pass:$PASSWORD" -out "ca-key.pem" 4096
# Generate CA
openssl req -new -x509 -days 365 -key "ca-key.pem" -sha256 -out "ca.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.pem" 4096

# Generate Server Certs.
openssl req -subj "/CN=$COMMON_NAME" -sha256 -new -key "server-key.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.pem" -CAkey "ca-key.pem" -CAcreateserial -out "server-cert.pem" -extfile extfile.cnf

# Generate Client Certs.
rm -f 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 -passin "pass:$PASSWORD" -CA "ca.pem" -CAkey "ca-key.pem" -CAcreateserial -out "cert.pem" -extfile extfile.cnf

rm -vf 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"

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

# 拷贝服务端证书,保存在docker目录下
mkdir -p /etc/docker
cp "ca.pem" "server-cert.pem" "server-key.pem" /etc/docker

运行脚本
sh autogen.sh

2.查看生成的文件

进入/etc/docker/cert.init/目录

[root@localhost ~]# ll /etc/docker/cert.init/
总用量 40
-r-------- 1 root root 3326 8月  21 11:53 ca-key.pem
-r--r--r-- 1 root root 2147 8月  21 11:53 ca.pem
-rw-r--r-- 1 root root   17 8月  21 11:53 ca.srl
-r--r--r-- 1 root root 1887 8月  21 11:53 cert.pem
-rw-r--r-- 1 root root   30 8月  21 11:53 extfile.cnf
-r-------- 1 root root 3247 8月  21 11:53 key.pem
-r--r--r-- 1 root root 1927 8月  21 11:53 server-cert.pem
-r-------- 1 root root 3243 8月  21 11:53 server-key.pem
-rw-r--r-- 1 root root 5407 8月  21 11:53 tls-client-certs.tar.gz

其中tls-client-certs.tar.gz里面是压缩了3个TLS登录所需的CA证书文件,需下载到本地解压

image.png

3.修改docker配置

vim /lib/systemd/system/docker.service

将ExecStart开头的那一行注释掉,复制这一行进去,作用是开放2376端口连接(2376端口是为TLS连接认证的),并使用刚刚生成的证书文件校验登录时所提供的CA证书是否正确

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

4.更新虚拟机配置并重启Docker

systemctl daemon-reload && systemctl restart docker

5.测试IDEA是否连接通过

在这里插入图片描述

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值