Utilisez la communication cryptée TLS pour vous connecter à Docker à distance

Par défaut, Docker s'exécute via des sockets UNIX non en réseau. Il peut également utiliser des sockets HTTP pour une communication facultative.
Si vous devez accéder à Docker via le réseau de manière sécurisée, vous pouvez activer TLS en pointant le logo Docker vers un certificat CA de confiance en spécifiant un indicateur.
En mode démon, il autorise uniquement les connexions des clients vérifiés par un certificat signé par l'autorité de certification. En mode client, il se connecte uniquement aux serveurs avec des certificats signés par l'autorité de certification.

# 创建CA证书目录
[root@localhost ~]# mkdir tls
[root@localhost ~]# cd tls/
# 创建CA密钥
[root@localhost tls]# openssl genrsa -aes256 -out ca-key.pem 4096
Generating RSA private key, 4096 bit long modulus
..............................................................................++
.....................................................................................................................................................................++
e is 65537 (0x10001)
Enter pass phrase for ca-key.pem:
Verifying - Enter pass phrase for ca-key.pem:
# 创建CA证书
[root@localhost tls]# openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj "/CN=*" -out ca.pem
Enter pass phrase for ca-key.pem:
[root@localhost tls]# ll
总用量 8
-rw-r--r--. 1 root root 3326 12月  3 17:20 ca-key.pem
-rw-r--r--. 1 root root 1765 12月  3 19:03 ca.pem
# 创建服务器私钥
[root@localhost tls]# openssl genrsa -out server-key.pem 4096
Generating RSA private key, 4096 bit long modulus
................................................................++
..................++
e is 65537 (0x10001)
[root@localhost tls]# ll
总用量 12
-rw-r--r--. 1 root root 3326 12月  3 17:20 ca-key.pem
-rw-r--r--. 1 root root 1765 12月  3 19:03 ca.pem
-rw-r--r--. 1 root root 3243 12月  3 19:03 server-key.pem
# 对私钥进行签名
[root@localhost tls]# openssl req -subj "/CN=*" -sha256 -new -key server-key.pem -out server.csr
[root@localhost tls]# ll
总用量 16
-rw-r--r--. 1 root root 3326 12月  3 17:20 ca-key.pem
-rw-r--r--. 1 root root 1765 12月  3 19:03 ca.pem
-rw-r--r--. 1 root root 1574 12月  3 19:04 server.csr
-rw-r--r--. 1 root root 3243 12月  3 19:03 server-key.pem
使用CA证书与私钥签名,输入上面设置的密码
[root@localhost tls]# openssl x509 -req -days 1000 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
Signature ok
subject=/CN=*
Getting CA Private Key
Enter pass phrase for ca-key.pem:
#生成客户端密钥
[root@localhost tls]# openssl genrsa -out key.pem 4096
Generating RSA private key, 4096 bit long modulus
....................................................................................................................++
.................................++
e is 65537 (0x10001)
#对客户端签名
[root@localhost tls]# openssl req -subj "/CN=client" -new -key key.pem -out client.csr
#创建配置文件
[root@localhost tls]# echo extendedKeyUsage=clientAuth > extfile.cnf
#签名证书
[root@localhost tls]# openssl x509 -req -days 1000 -sha256 -in client.csr  -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
Signature ok
subject=/CN=client
Getting CA Private Key
Enter pass phrase for ca-key.pem:
[root@localhost tls]# ll
总用量 40
-rw-r--r--. 1 root root 3326 12月  3 17:20 ca-key.pem
-rw-r--r--. 1 root root 1765 12月  3 19:03 ca.pem
-rw-r--r--. 1 root root   17 12月  3 19:35 ca.srl
-rw-r--r--. 1 root root 1696 12月  3 19:35 cert.pem
-rw-r--r--. 1 root root 1582 12月  3 19:29 client.csr
-rw-r--r--. 1 root root   28 12月  3 19:32 extfile.cnf
-rw-r--r--. 1 root root 3243 12月  3 19:08 key.pem
-rw-r--r--. 1 root root 1647 12月  3 19:08 server-cert.pem
-rw-r--r--. 1 root root 1574 12月  3 19:04 server.csr
-rw-r--r--. 1 root root 3243 12月  3 19:03 server-key.pem
# 删除多余文件
[root@localhost tls]#

Test sur le client

[root@client ~]# docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://master:2376 version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:03:45 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       4484c46d9d
  Built:            Wed Sep 16 17:02:21 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.9
  GitCommit:        ea765aba0d05254012b0b9e595e995c09186427f
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

Je suppose que tu aimes

Origine blog.csdn.net/Ghostpant/article/details/110562858
conseillé
Classement