下面是“Docker开启安全的TLS远程连接访问方式”的完整攻略,包含两条示例说明。
步骤一:创建CA证书
-
在本地创建一个目录,比如
docker-tls
作为证书的存储目录。 -
切换到
docker-tls
目录中。 -
执行如下命令,生成 CA 私钥:
openssl genrsa -aes256 -out ca-key.pem 4096
-
执行如下命令,生成 CA 证书:
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
-
通过在浏览器中双击
ca.pem
文件,将其导入到受信任的根证书颁发机构中。
步骤二:创建服务器证书
-
切换到
docker-tls
目录中。 -
执行如下命令,生成服务器私钥:
openssl genrsa -out server-key.pem 4096
-
执行如下命令,生成证书签名请求文件:
openssl req -subj "/CN=<server_fqdn>" -sha256 -new -key server-key.pem -out server.csr
其中,<server_fqdn>
是服务器的FQDN,例如:www.example.com
。
- 创建
extfile.cnf
文件,并添加以下内容:
subjectAltName = DNS:<server_fqdn>,DNS:localhost,IP:127.0.0.1
extendedKeyUsage = serverAuth
- 执行如下命令,生成服务器证书:
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
该命令会使用之前生成的 CA 证书来签发服务器证书。
步骤三:配置Docker客户端
-
切换到
docker-tls
目录中。 -
执行如下命令,生成客户端私钥:
openssl genrsa -out key.pem 4096
-
执行如下命令,生成证书签名请求文件:
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
-
创建
extfile.cnf
文件,并添加以下内容:
extendedKeyUsage = clientAuth
- 执行如下命令,生成客户端证书:
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
步骤四:配置Docker服务器
-
在服务器上创建一个目录
docker-tls
,并将之前生成的ca.pem
、server-cert.pem
和server-key.pem
文件拷贝到该目录中。 -
修改 Docker 的启动脚本,增加如下参数:
--tlsverify --tlscacert=<path to ca.pem> --tlscert=<path to server-cert.pem> --tlskey=<path to server-key.pem>
如果您使用的是 Docker Compose,可以将上述参数添加到 Compose 文件中的服务定义中。
示例一:使用TLS远程连接到Docker服务器
现在,我们已经配置了服务器和客户端,可以使用 TLS 加密的方式来远程连接到服务器了。下面是连接的示例命令:
docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=<server_ip>:2376 version
其中,<server_ip>
是服务器的 IP 地址。
示例二:使用TLS远程部署服务到Docker Swarm集群
我们可以通过Docker客户端,在Docker Swarm集群中使用TLS加密的方式部署服务。下面是示例命令:
docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=<swarm_manager_ip>:2376 stack deploy -c <compose_file_name> <stack_name>
其中,<swarm_manager_ip>
是Docker Swarm管理节点的IP地址,<compose_file_name>
是Docker Compose文件的名称,<stack_name>
是Docker Stack的名称。
以上就是“Docker开启安全的TLS远程连接访问方式”的完整攻略,包含两条示例说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker开启安全的TLS远程连接访问方式 - Python技术站