A.1.3 为客户端创建密钥对
在本节中,会将前面对于 node3
的操作在Docker客户端节点 node1
上重复一遍。
在CA( node2
)上运行全部命令。
(1)为node1创建密钥。
这会在工作目录下创建名为client-key.pem的新文件。
$ openssl genrsa -out client-key.pem 4096
(2)创建CSR。确保所使用的节点DNS名称是正确的,该节点对应Docker安全客户端。示例中使用node1。
$ openssl req -subj '/CN=node1' -new -key client-key.pem -out client.csr
该命令会在当前目录下创建名为client.csr的新文件。
(3)创建名为 extfile.cnf
的文件,并用下面的值填充。这样会将证书设置为客户端认证可用。
extendedKeyUsage = clientAuth
(4)使用CSR、CA公钥、私钥和 extfile.cnf
为 node1
创建证书。该步骤会在当前目录下创建名为 client-cert.pem
的客户端公钥。
$ openssl x509 -req -days 730 -sha256 \
-in client.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out client-cert.pem -extfile extfile.cnf
删除 CSR
和 extfile.cnf
文件,因为不会再用到它们了。
$ rm client.csr extfile.cnf
此时,在工作目录下应该有如下7个文件。
ca-key.pem << CA private key
ca.pem << CA public key (cert)
ca.srl << Tracks serial numbers
client-cert.pem << client public key (Cert)
client-key.pem << client private key
daemon-cert.pem << daemon public key (cert)
daemon-key.pem << daemon private key
在继续之前,需要移除密钥文件的写权限,将密钥文件对自己以及其他属于当前组的用户变为只读。
$ chmod 0400 ca-key.pem client-key.pem daemon-key.pem