一旦您创建了 CA 和证书,就可以通过运行 ndb_mgm 客户端带有 --test-tls
,像这样:
$> ndb_mgm --test-tls
No valid certificate.
如果客户端可以使用 TLS 连接,将生成适当的消息。您可能需要包括其他 ndb_mgm 选项,例如 --ndb-tls-search-path
,以便促进 TLS 连接,如下所示:
$> ndb_mgm --test-tls --ndb-tls-search-path="CA:keys"
Connected to management server at localhost port 1186 (using TLS)
您可以通过使用 ndb_sign_keys 创建的 CA 和证书,执行集群的滚动重新启动,首先重新启动管理节点,使用 --ndb-tls-search-path
选项。然后,重新启动数据节点,使用 --ndb-tls-search-path
。 --ndb-tls-search-path
也支持 mysqld 作为集群 API 节点运行。
要使 TLS 生效,每个连接到集群的节点都必须具有有效的证书和密钥。这包括数据节点、API 节点和实用程序。同一个证书和密钥文件可以被多个节点使用。
数据节点记录 TLS 连接并包括证书文件的完整路径,如下所示:
$> ndbmtd -c localhost:1186 --ndb-tls-search-path='CA:keys'
2023-12-19 12:02:15 [ndbd] INFO -- NDB TLS 1.3 available using certificate file 'keys/ndb-data-node-cert'
2023-12-19 12:02:15 [ndbd] INFO -- Angel connected to 'localhost:1186'
2023-12-19 12:02:15 [ndbd] INFO -- Angel allocated nodeid: 5
您可以通过检查 TLS INFO
命令的输出在 ndb_mgm 客户端中,像这样:
$> ndb_mgm --ndb-tls-search-path="CA:keys"
-- NDB Cluster -- Management Client --
ndb_mgm> TLS INFO
Connected to management server at localhost port 1186 (using TLS)
Main interactive connection is using TLS
Event listener connection is using TLS
Server reports 6 TLS connections.
Session ID: 32
Peer address: ::
Certificate name: NDB Node Dec 2023
Certificate serial: 39:1E:4A:78:E5:93:45:09:FC:56
Certificate expires: 21-Apr-2024
Session ID: 31
Peer address: 127.0.0.1
Certificate name: NDB Node Dec 2023
Certificate serial: 39:1E:4A:78:E5:93:45:09:FC:56
Certificate expires: 21-Apr-2024
Session ID: 30
Peer address: 127.0.0.1
Certificate name: NDB Node Dec 2023
Certificate serial: 39:1E:4A:78:E5:93:45:09:FC:56
Certificate expires: 21-Apr-2024
Session ID: 18
Peer address: 127.0.0.1
Certificate name: NDB Data Node Dec 2023
Certificate serial: 57:5E:58:70:7C:49:B3:74:1A:99
Certificate expires: 07-May-2024
Session ID: 12
Peer address: 127.0.0.1
Certificate name: NDB Data Node Dec 2023
Certificate serial: 57:5E:58:70:7C:49:B3:74:1A:99
Certificate expires: 07-May-2024
Session ID: 1
Peer address: 127.0.0.1
Certificate name: NDB Management Node Dec 2023
Certificate serial: 32:10:44:3C:F4:7D:73:40:97:41
Certificate expires: 17-May-2024
Server statistics since restart
Total accepted connections: 32
Total connections upgraded to TLS: 8
Current connections: 6
Current connections using TLS: 6
Authorization failures: 0
ndb_mgm>
如果 当前连接
和 当前使用 TLS 的连接
相同,这意味着所有集群连接都使用 TLS。
一旦您为所有节点建立了 TLS 连接,就应该使 TLS 成为严格的要求。对于客户端,您可以通过在每个集群主机的 my.cnf
文件中设置 ndb-mgm-tls=strict
来实现。强制 TLS 要求在管理服务器上通过在集群 config.ini
文件的 [mgm default]
部分中设置 RequireTls=true
,然后执行集群的滚动重新启动,以便使更改生效。对数据节点也执行相同的操作,通过在 [ndbd default]
部分中设置 RequireTls=true
,然后执行第二次滚动重新启动,以便使更改生效。使用 ndb_mgmd 和 --reload
和 --config-file
选项两次,以确保每个配置文件更改都被管理服务器读取。
要替换私钥,请使用 ndb_sign_keys --create-key
创建新密钥和证书,使用 --node-id
和 --node-type
选项,如果需要限制替换为单个节点 ID、节点类型或两者。如果工具找到现有的密钥和证书文件,它将重命名它们以反映其退休状态,并将新创建的密钥和证书保存为活动文件;新的文件将在下次节点重新启动时使用。
要替换证书而不替换私钥,请使用 ndb_sign_keys 不带 --create-key
选项。这将为现有的密钥创建一个新的证书(不替换密钥),并退休旧证书。
远程密钥签名也由 ndb_sign_keys 支持。使用 SSH,--remote-CA-host
选项提供了 CA 主机的 SSH 地址,以 user@host
格式。默认情况下,局部 ndb_sign_keys 进程使用系统 ssh 实用程序和地址在远程主机上运行 ndb_sign_keys,使用正确的选项来执行所需的签名。或者,如果 --remote-openssl=true
,则在远程主机上使用 openssl 而不是 ndb_sign_keys。
在使用远程签名时,网络上传输的数据是一个 PKCS#10 签名请求,而不是私钥,该私钥从不离开本地主机。