在 Windows 和 Linux 中配置 SSL/TLS 加密
当您想要保护通信时,应该配置 SSL/TLS 加密。 NCache 服务器和客户端,尤其是在数据安全至关重要的生产或分布式环境中,都需要进行TLS配置。该过程首先创建或获取TLS证书并将其放置在正确的证书存储区中。之后,只需记下证书名称和指纹,使用提供的命令或配置文件启用TLS,确保所有服务器和客户端使用相同的设置,然后重启服务器即可。 NCache 提供安全应用更改的服务。
注意:
在继续执行以下操作之前,请确保缓存和客户端进程已停止。
证书放置的注意事项
以下是针对 Windows 和 Linux 的证书放置的注意事项:
如果您有一个测试证书(包含根证书和中间证书),则需要将该证书添加到本地计算机的“个人”证书存储区和“受信任的根证书存储区”。如果您有一个单独的“受信任的根证书存储区”和“个人”证书存储区,则需要分别添加它们,即把“个人”证书添加到“个人”证书存储区,把 CA 根证书添加到“受信任的根证书存储区”。对于非双向 TLS,请配置服务器证书。客户端必须信任颁发服务器证书的证书颁发机构。对于双向 TLS,请同时配置服务器和客户端证书。服务器必须信任客户端证书的颁发机构,客户端也必须信任服务器证书的颁发机构。
注意:
NCache 将自动使用存储在证书存储中的证书。 当在正确的用户帐户下启动时, NCache 服务将自动识别并使用适当证书存储中的相关证书。
注意:
如果您不想从 Bridge 和 Server 节点运行客户端,则无需在 Bridge 和 Server 节点上安装客户端证书。
注意:
从 5.3 SP5 及更高版本,客户端和服务器可以有不同的证书。
TLS证书选择和身份验证
服务器选择证书
在 Windows 系统中,服务器启动时会从注册表中读取已配置的证书指纹。它会检查本地计算机和当前用户的“受信任的根证书颁发机构”存储区,然后检查本地计算机和当前用户的个人证书颁发机构存储区。服务器会选择找到的第一个匹配证书。随后,服务器会通过指纹读取该证书并将其共享给客户端,从而实现安全通信。
在Linux系统中,如果找不到已配置的证书,则 My 商店, NCache 同时搜索 根源 存储。
客户选择证书
当客户端与服务器通信启用双向 TLS 时,客户端会将配置的客户端证书提交给服务器进行身份验证。
双向TLS身份验证
对于双向客户端-服务器TLS协议,客户端会向服务器提供其配置的证书。服务器必须信任颁发客户端证书的证书颁发机构。
对于相互服务器间的 TLS,连接服务器必须提供有效的证书,并且每个服务器都必须信任颁发其他服务器所用证书的证书颁发机构。
如何配置 TLS 加密
要配置 TLS 加密,请参阅下文。
要在 Windows 计算机上安装 TLS 证书,应遵循以下步骤。
步骤 1 - 机器登录: 登录到您的机器。
步骤 2 - 创建自签名证书: 创建(您可以按照以下详细说明创建自签名证书) Microsoft WCF 证书文档)或获取包含可导出私钥的 TLS 证书。
重要提示
- 您的证书必须由证书颁发机构 (CA) 授权。为了将其反映为配置的一部分,请确保基本约束部分指定 主题类型=CA ,在 证书详细信息。同样,您可以通过以下方式实现此目的
-TextExtension具有值的属性@("2.5.29.19={text}CA=true")使用以下命令生成证书时:New-SelfSignedCertificate. - 我们不建议您使用自行生成的证书 最佳的 不过,您可以在测试环境中使用它们。
步骤 3 - 导入证书: 按照以下说明将证书导入到相应的机器中 微软证书安装指南.
步骤 4 - 打开 Microsoft 管理控制台: 媒体中心 WIN + R,类型 MMC,然后按 输入.
第五步 - 选择证书: 在 Microsoft 管理控制台 (MMC) 中, 文件 菜单上,单击 添加或删除管理单元。 选择 科瑞证书 从可用管理单元列表中,然后单击 添加 按钮。
步骤 6 - 选择帐户: 从帐户类型中选择 我的用户帐户, 服务帐号和 电脑帐号。 您可以选择一个 我的用户帐户 或本地计算机,具体取决于您放置证书的位置。
步骤 7 - 找到证书: 在左侧窗格中 MMC卡,扩大 科瑞证书 并导航 当前用户 > 个人 > 证书 找到列出的 TLS 证书 客户端认证 作为 预期目的 并双击。要了解证书放置信息,请参阅 证书放置的注意事项.
请注意,您需要向已配置的用户帐户授予权限(除了机器管理员之外,其他人都不是机器管理员。)以访问证书的私钥。
- 右键单击证书并选择: 所有任务 -> 管理私钥

- 在权限窗口中, 加 点击“添加”按钮,然后授予所需的用户帐户权限 阅读许可点击“申请”。

注意:
如果您配置的用户帐户没有访问证书私钥的权限, NCache 客户端在安全通信初始化期间无法检索证书,导致 TLS 握手失败和运行时异常。
步骤 8 - 获取指纹: 在证书对话框中,单击 信息 标签并找到 指纹点击它,然后复制框中的十六进制字符。如果证书指纹中包含冒号(“:”)或多余的空格,请将其删除。保存指纹,因为后续步骤需要用到它。
步骤 9 - 复制证书名称: 同样,复制 证书名称(中文) 点击 咨询内容 属性并仅复制后面的内容 CN= 在本例中为“示例”。请保存证书名称,因为后续步骤中需要用到。
步骤 10 - 验证服务是否正在运行: 确保 NCache 服务在用于导入证书的同一用户下运行。
第 11 步 - 启用 TLS 安全性: 使用以下 PowerShell Cmdlet 启用 TLS 安全。执行 启用-NCacheTLS 命令中,请务必指定在步骤8和9中保存的服务器的证书名称和指纹。同样,您可以按照上述步骤添加客户端证书。
此 Enable-NCacheTLS cmdlet 可用时 NCache 已安装在机器上。在客户端机器上 NCache 未安装,请通过以下方式手动配置 TLS: tls.ncconf 文件包含在 NCache NuGet软件包.
以下示例为客户端-服务器和服务器-服务器通信启用 TLS。
配置非双向TLS
非双向 TLS 加密客户端-服务器和服务器-服务器通信,而无需连接的客户端或服务器提供客户端证书。
Enable-NCacheTLS -Node "20.200.20.39,20.200.20.40" -ServerCertificateCN "Example" `
-ServerCertificateThumbprint "596846ab6bdd9edb03cdfbdfa1aa7b0b05e744a6" `
-ServerToServerCommunication -ClientServerCommunication
对于普通的TLS(无需相互 TLS 连接),则 tls.ncconf 包含以下标签:
<tls-info>
<server-certificate-cn>certificate-name</server-certificate-cn>
<server-certificate-thumbprint>your-thumbprint</server-certificate-thumbprint>
<client-certificate-cn></client-certificate-cn>
<client-certificate-thumbprint></client-certificate-thumbprint>
<enable>true</enable>
<enable-client-server-tls>true</enable-client-server-tls>
<enable-server-to-server-tls>true</enable-server-to-server-tls>
<use-mutual-tls-for-client-to-server>false</use-mutual-tls-for-client-to-server>
<use-mutual-tls-for-server-to-server>false</use-mutual-tls-for-server-to-server>
<protocol-version>tls12</protocol-version>
</tls-info>
配置相互 TLS
双向TLS需要服务器端和客户端都拥有证书。每一方都会对另一方提供的证书进行验证。
Enable-NCacheTLS -Node "20.200.20.39,20.200.20.40" -ServerCertificateCN "Example" `
-ServerCertificateThumbprint "596846ab6bdd9edb03cdfbdfa1aa7b0b05e744a6" `
-ClientCertificateCN "MyClientCert" `
-ClientCertificateThumbprint "1234567890EFGHIJKL" `
-ServerToServerCommunication -ClientServerCommunication `
-UseMutualTLSForClientToServer True -UseMutualTLSForServerToServer True
对于双向TLS, tls.ncconf 包含以下标签:
<tls-info>
<server-certificate-cn>certificate-name</server-certificate-cn>
<server-certificate-thumbprint>your-thumbprint</server-certificate-thumbprint>
<client-certificate-cn>certificate-name</client-certificate-cn>
<client-certificate-thumbprint>your-thumbprint</client-certificate-thumbprint>
<enable>true</enable>
<enable-client-server-tls>true</enable-client-server-tls>
<enable-server-to-server-tls>true</enable-server-to-server-tls>
<use-mutual-tls-for-client-to-server>true</use-mutual-tls-for-client-to-server>
<use-mutual-tls-for-server-to-server>true</use-mutual-tls-for-server-to-server>
<protocol-version>tls12</protocol-version>
</tls-info>
有关在不同场景下启用 TLS 的更多示例,请查看 启用-NCacheTLS 页面。
注意:
如果 ProtocolVersion 上述命令未提供参数,则使用的默认协议是 TLS 1.2的.
重要提示
确保所有服务器和客户端节点上的配置值一致,以保证集群的连通性和同质性。
步骤 12 - 重启服务和进程: 设置所需的属性后,重新启动缓存、客户端进程,然后 NCache 服务。 确保 NCache 服务在用于导入证书的同一用户下运行。
注意:
启用证书后,请确保:
- 此 NCache 服务在用于导入证书的同一用户下运行。
- 所有客户端应用程序都在 64 位机器上运行。
通过 TLS 验证成功的客户端连接
为了通过 TLS 验证客户端连接是否成功,您可以运行 测试压力 使用 PowerShell cmdlet。以下示例对名为“Test-Stress”的缓存运行 Test-Stress 命令。 演示缓存.
Test-Stress -CacheName demoCache
您还可以使用 Microsoft 网络监视器来验证这一点。 如果启用了 TLS, 协议名称 过程的 PowerShell的 运行此命令时 TLS.
注意:
UseMutualTLSForClientToServer, EnableBridgeTLS, EnableClientServerTLS, EnableServerToServerTLS和 UseMutualTLSForServerToServer 如果 Enable 尚未设置为 true tls.ncconf,无论它们是否已单独启用。
故障排除
由于以下原因,通过 TLS 的客户端连接可能会失败:
- 如果注册表项丢失,连接可能会失败。 确保所有条目都在注册表中创建。
- 如果 NCache 如果服务运行在与安装证书所用帐户不同的用户帐户下,则服务可能无法访问证书。
- 如果配置的证书指纹不正确或与已安装的证书不匹配,则连接失败。
- 如果客户端的可信根没有服务器的CA。
- If
UseMutualTLSForClientToServerorUseMutualTLSForServerToServer为 true 并且服务器的受信任根没有客户端或其他服务器的 CA。 - 如果客户端和服务器计算机中的属性值不同,您会收到一条错误消息“解密操作失败”。