您当前的位置:首页 > 网站建设 > 网站维护
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax | jQuery |

Docker开启TLS和CA认证的方法步骤

51自学网 2022-07-04 11:30:51
  网站维护

前言:Docker直接开启2375端口是不安全的,别人只要连上之后就可以任意操作,下面是开启Docker的TLS和CA认证方法,并使用Jenkins和Portainer连接。

一、生成证书

查看服务器主机名

hostname

auto-generate-docker-tls-ca.sh

# !/bin/bash# 一键生成TLS和CA证书# Create : 2021-08-25# Update : 2021-08-25# @Autor : wuduoqiang# 服务器主机名SERVER="6c377ffb8e86"# 密码PASSWORD="2cx&BUjsV4u%3TW9"# 国家COUNTRY="CN"# 省份STATE="海南省"# 城市CITY="海口市"# 机构名称ORGANIZATION="小强崽公司"# 机构单位ORGANIZATIONAL_UNIT="小强崽单位"# 邮箱EMAIL="875667601@qq.com"# 生成CA密钥openssl genrsa -aes256 -passout pass:$PASSWORD  -out ca-key.pem 2048# 生成CA证书openssl req -new -x509 -passin "pass:$PASSWORD" -days 3650 -key ca-key.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-key.pem -passin "pass:$PASSWORD" -CAcreateserial -out server-cert.pem# 生成客户端密钥openssl genrsa -out client-key.pem 2048# 生成客户端证书签名的请求文件openssl req -subj '/CN=client' -new -key client-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-key.pem  -passin "pass:$PASSWORD" -CAcreateserial -out client-cert.pem -extfile extfile.cnf# 更改密钥权限chmod 0400 ca-key.pem server-key.pem client-key.pem# 更改证书权限chmod 0444 ca-cert.pem server-cert.pem client-cert.pem# 删除无用文件# rm ca-cert.srl client-req.csr server-req.csr extfile.cnf

文件说明

ca.srl:CA签发证书的序列号记录文件ca-cert.pem:CA证书ca-key.pem:CA密钥server-key.pem:服务端密钥server-req.csr:服务端证书签名请求文件server-cert.pem:服务端证书client-key.pem:客户端密钥extfile.cnf:客户端证书扩展配置文件client-req.csr:客户端证书签名请求文件client-cert.pem:客户端证书

命令解析

# -subj /C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$SERVER/emailAddress=$EMAIL-subj 是 指定证书申请人的信息C  是 Country NameST 是 State or Province NameL  是 Locality NameO  是 Organization NameOU 是 Organizational Unit NameCN 是 Common NameemailAddress 是 Email Address

二、开启远程

开启Docker的远程访问API

# 编辑文件vim /etc/systemd/system/docker.service# 修改内容,注意证书的指定位置ExecStart=/usr/bin/dockerd /--tlsverify /--tlscacert=/etc/docker/ca-cert.pem /--tlscert=/etc/docker/server-cert.pem /--tlskey=/etc/docker/server-key.pem /-H unix:///var/run/docker.sock /-H tcp://0.0.0.0:2375# 重启服务systemctl daemon-reload && systemctl restart docker

如果没有密钥和证书是连不上的

docker -H 192.168.8.248:2375 images

使用主机名没有密钥和证书也是连不上的

docker -H 6c377ffb8e86:2375 images

加上密钥和证书没有使用主机名也是连不上

curl https://192.168.8.248:2375/info --cert ./client-cert.pem --key ./client-key.pem --cacert ./ca-cert.pem

加上密钥和证书并且使用主机名就能访问

curl https://6c377ffb8e86:2375/info --cert ./client-cert.pem --key ./client-key.pem --cacert ./ca-cert.pem

三、远程连接

3.1 Jenkins连接

添加凭证

填写信息

测试连接,注意这里要使用主机名

如果是docker安装的jenkins,则需要映射主机名

version: '3'services:  jenkins:    restart: always    image: 192.168.8.247/xiaoqiangzai/jenkins:latest    container_name: jenkins    ports:      - '8888:8080'      - '50000:50000'    volumes:      - ./data/jenkins_home:/var/jenkins_home      - ./data/war/jenkins.war:/usr/share/jenkins/jenkins.war    environment:      JENKINS_OPTS: "--prefix=/jenkins"    extra_hosts:      - "6c377ffb8e86:192.168.8.248"

3.2 Portainer连接

选择客户端密钥和证书以及CA证书

连接正常

如果是docker安装的Portainer,则需要映射主机名

version: '3'services:  portainer:    restart: always    image: portainer/portainer-ce:latest    container_name: portainer    privileged: true    ports:      - '9000:9000'    volumes:      - ./data/data:/data      - ./data/public:/public    extra_hosts:      - "6c377ffb8e86:192.168.8.248"

下载地址:
腾讯云服务器tomcat端口无法访问的解决方法
简析Linux网络编程函数
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1