目錄
- 一、生成證書
- 二、開啟遠(yuǎn)程
- 三、遠(yuǎn)程連接
- 3.1 Jenkins連接
- 3.2 Portainer連接
前言:Docker直接開啟2375端口是不安全的,別人只要連上之后就可以任意操作,下面是開啟Docker的TLS和CA認(rèn)證方法,并使用Jenkins和Portainer連接。
一、生成證書
查看服務(wù)器主機(jī)名
![](/d/20211016/0d46d09530a2c8c49712998306bbed1a.gif)
auto-generate-docker-tls-ca.sh
# !/bin/bash
# 一鍵生成TLS和CA證書
# Create : 2021-08-25
# Update : 2021-08-25
# @Autor : wuduoqiang
# 服務(wù)器主機(jī)名
SERVER="6c377ffb8e86"
# 密碼
PASSWORD="2cx&BUjsV4u%3TW9"
# 國家
COUNTRY="CN"
# 省份
STATE="海南省"
# 城市
CITY="??谑?
# 機(jī)構(gòu)名稱
ORGANIZATION="小強(qiáng)崽公司"
# 機(jī)構(gòu)單位
ORGANIZATIONAL_UNIT="小強(qiáng)崽單位"
# 郵箱
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"
# 生成服務(wù)端密鑰
openssl genrsa -out server-key.pem 2048
# 生成服務(wù)端證書簽名的請(qǐng)求文件
openssl req -subj "/CN=$SERVER" -new -key server-key.pem -out server-req.csr
# 生成服務(wù)端證書
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
# 生成客戶端證書簽名的請(qǐng)求文件
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
# 更改密鑰權(quán)限
chmod 0400 ca-key.pem server-key.pem client-key.pem
# 更改證書權(quán)限
chmod 0444 ca-cert.pem server-cert.pem client-cert.pem
# 刪除無用文件
# rm ca-cert.srl client-req.csr server-req.csr extfile.cnf
![](/d/20211016/35cba454d7f2594a291523c31040b114.gif)
文件說明
ca.srl:CA簽發(fā)證書的序列號(hào)記錄文件
ca-cert.pem:CA證書
ca-key.pem:CA密鑰
server-key.pem:服務(wù)端密鑰
server-req.csr:服務(wù)端證書簽名請(qǐng)求文件
server-cert.pem:服務(wù)端證書
client-key.pem:客戶端密鑰
extfile.cnf:客戶端證書擴(kuò)展配置文件
client-req.csr:客戶端證書簽名請(qǐng)求文件
client-cert.pem:客戶端證書
命令解析
# -subj /C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$SERVER/emailAddress=$EMAIL
-subj 是 指定證書申請(qǐng)人的信息
C 是 Country Name
ST 是 State or Province Name
L 是 Locality Name
O 是 Organization Name
OU 是 Organizational Unit Name
CN 是 Common Name
emailAddress 是 Email Address
![](/d/20211016/cd9b8f296b80fb9225e6a3b21e31c60a.gif)
二、開啟遠(yuǎn)程
開啟Docker的遠(yuǎn)程訪問API
# 編輯文件
vim /etc/systemd/system/docker.service
# 修改內(nèi)容,注意證書的指定位置
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
# 重啟服務(wù)
systemctl daemon-reload && systemctl restart docker
![](/d/20211016/5a8df122e263bc41a608b3db6a118063.gif)
如果沒有密鑰和證書是連不上的
docker -H 192.168.8.248:2375 images
![](/d/20211016/cb3e51716e98b4ffa64edb857937a178.gif)
使用主機(jī)名沒有密鑰和證書也是連不上的
docker -H 6c377ffb8e86:2375 images
![](/d/20211016/5b18929539be41da3b213caa758c2d34.gif)
加上密鑰和證書沒有使用主機(jī)名也是連不上
curl https://192.168.8.248:2375/info --cert ./client-cert.pem --key ./client-key.pem --cacert ./ca-cert.pem
![](/d/20211016/0a05dd2300532f55692be1afcce44ff4.gif)
加上密鑰和證書并且使用主機(jī)名就能訪問
curl https://6c377ffb8e86:2375/info --cert ./client-cert.pem --key ./client-key.pem --cacert ./ca-cert.pem
![](/d/20211016/3eeaf659e488ca16fc4b582b377a5728.gif)
三、遠(yuǎn)程連接
3.1 Jenkins連接
添加憑證
![](/d/20211016/098c491ec3a9b1ae7c1c82b17d9a72e5.gif)
填寫信息
![](/d/20211016/1af011a162c90fb366199620e81485f4.gif)
測(cè)試連接,注意這里要使用主機(jī)名
![](/d/20211016/4a5fe6ac4ce056a8338c45426065d850.gif)
如果是docker安裝的jenkins,則需要映射主機(jī)名
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證書
![](/d/20211016/8190cb82003968c481f128767ababc8a.gif)
連接正常
![](/d/20211016/8010d45f2d570425aa81361b006c4595.gif)
如果是docker安裝的Portainer,則需要映射主機(jī)名
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"
到此這篇關(guān)于Docker開啟TLS和CA認(rèn)證的方法步驟的文章就介紹到這了,更多相關(guān)Docker開啟TLS和CA認(rèn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!