Docker開啟TLS和CA認證的方法步驟
前言: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簽發(fā)證書的序列號記錄文件 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 Name ST 是 State or Province Name L 是 Locality Name O 是 Organization Name OU 是 Organizational Unit Name CN 是 Common Name emailAddress 是 Email Address

二、開啟遠程
開啟Docker的遠程訪問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 # 重啟服務 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"
到此這篇關于Docker開啟TLS和CA認證的方法步驟的文章就介紹到這了,更多相關Docker開啟TLS和CA認證內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
WIN10系統(tǒng)和Docker內(nèi)部容器IP互通方式
這篇文章主要介紹了WIN10系統(tǒng)和Docker內(nèi)部容器IP互通方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
docker Get https://registry-1.docker.io/v2/:
本文主要介紹了docker Get https://registry-1.docker.io/v2/: net/http: request canceled 報錯,具有一定的參考價值,感興趣的可以了解一下2025-03-03
利用Dockerfile優(yōu)化Nestjs構建鏡像大小詳情
這篇文章主要介紹了利用Dockerfile優(yōu)化Nestjs構建鏡像大小詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08
在 Docker 環(huán)境中部署和運行 Nginx 的方法
在當今的技術領域,Docker 就像一位神奇的魔法師,能夠讓我們輕松地管理和部署各種應用程序,這篇文章主要介紹了在 Docker 環(huán)境中部署和運行 Nginx 的方法,需要的朋友可以參考下2024-12-12

