服务器之家

服务器之家 > 正文

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

时间:2021-09-17 15:22     来源/作者:小强崽

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

一、生成证书

查看服务器主机名

?
1
hostname

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

auto-generate-docker-tls-ca.sh

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# !/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

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

文件说明

?
1
2
3
4
5
6
7
8
9
10
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:客户端证书

命令解析

?
1
2
3
4
5
6
7
8
9
# -subj /c=$country/st=$state/l=$city/o=$organization/ou=$organizational_unit/cn=$server/emailaddress=$email
-subj 是 指定证书申请人的信息
c  是 country name
st 是 state or province name
l  是 locality name
o  是 organization name
ou 是 organizational unit name
cn 是 common name
emailaddress 是 email address

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

二、开启远程

开启docker的远程访问api

?
1
2
3
4
5
6
7
8
9
10
11
12
# 编辑文件
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开启TLS和CA认证的方法步骤

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

?
1
docker -h 192.168.8.248:2375 images

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

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

?
1
docker -h 6c377ffb8e86:2375 images

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

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

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

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

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

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

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

三、远程连接

3.1 jenkins连接

添加凭证

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

填写信息

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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开启TLS和CA认证的方法步骤

连接正常

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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"

到此这篇关于docker开启tls和ca认证的方法步骤的文章就介绍到这了,更多相关docker开启tls和ca认证内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/xiaoqiangzai/p/15192118.html

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
返回顶部