跳到主要内容

保护您的 Garnet 部署

Garnet 支持使用 .NET 中内置的 SslStream 功能进行 TLS/SSL 连接。您可以启用端到端加密,接下来将讨论此功能。Garnet 还支持基于密码的线路身份验证,遵循 RESP 中的 AUTH 命令,这将在本节末尾讨论。

TLS 配置

为了将 Garnet 与 TLS 结合使用,您可以创建自己的证书。出于严格的测试目的,我们包含测试证书文件(位于 <root>/test/testcerts)。您需要同时启动服务器和客户端并启用 TLS 加密。

将 GarnetServer 与 TLS 结合使用

在服务器端,您需要启动 Garnet 并启用 TLS。在命令提示符下,要添加的参数是 --tls 以启用 TLS,通过 --cert-file-name 提供证书详细信息(我们只接受 .pfx 文件),通过 --cert-password 提供 TLS 证书密码,通过 --client-certificate-required 指示是否需要 TLS 客户端证书,通过 --issuer-certificate-path 提供用于验证的颁发者证书,以及通过 --certificate-revocation-check-mode 指示 TLS 是否检查证书吊销。您还可以通过 cert-subject-name 在 Windows 上通过主题名称使用证书。证书刷新可以通过选项 --cert-refresh-freq 自动完成。

    GarnetServer --tls --cert-file-name testcert.pfx --cert-password placeholder

如果您通过 NuGet 托管自己的 GarnetServer,您可以通过传入 IGarnetTlsOptions 实现的实例直接指定 SSL 连接选项,我们有一个此示例的原型,即 GarnetTlsOptions.cs

提示

如果您拥有 .key 和 .crt 格式的私钥和公钥文件,您可以使用 openssl 创建 .pfx 格式

    openssl pkcs12 -inkey <server-name>.key -in <server-name>.crt -export -out server-cert.pfx

注意

存储库在路径 <root>/test/testcerts 下包含一个测试 .pfx 文件。为了进行测试,可以使用密码 placeholder 尝试 testcert.pfx 文件。Garnet 存储库中的示例测试证书是自签名的,默认情况下不受信任。此外,它们可能使用过时的哈希和密码套件,这些套件可能不够强大。为了获得更好的安全性,请购买由知名证书颁发机构签名的证书。这些证书只能在开发/测试环境中使用。

将兼容 RESP 的客户端与 TLS 结合使用

要将 RESP 客户端与 Garnet 连接,您需要服务器证书、私钥和 CA 证书文件。例如,在启动客户端时提供以下参数

    --cacert garnet-ca.crt
--cert garnet-cert.crt
--key garnet.key

生成您自己的自签名证书

如果您需要生成自签名证书以测试 Garnet Server 的 TLS,请按照以下步骤操作。

  1. 安装 openssl 库

    对于 Linux 发行版

    sudo apt install openssl

    对于 Windows 系统

    OpenSSL wiki 中选择最合适的选项

  2. 运行以下命令

    2.1 创建根密钥

    openssl ecparam -out <issuer-name>.key -name prime256v1 -genkey

    2.2 创建根证书并自签名

    使用以下命令生成证书签名请求 (CSR)。

    openssl req -new -sha256 -key <issuer-name>.key -out <issuer-name>.csr

    注意:当出现提示时,输入根密钥的密码以及自定义 CA 的组织信息,例如国家/地区、州、组织、组织单位和颁发者名称。

    使用以下命令生成根证书

    openssl x509 -req -sha256 -days 365 -in <issuer-name>.csr -signkey <issuer-name>.key -out <issuer-name>.crt

    此创建将用于签署您的服务器证书。

    2.3 创建证书的密钥

    注意:此服务器名称必须与颁发者名称不同。

    openssl ecparam -out <server-name>.key -name prime256v1 -genkey

    2.4 创建 CSR(证书签名请求)

    openssl req -new -sha256 -key <server-name>.key -out <server-name>.csr

    注意:当出现提示时,输入根密钥的密码以及自定义 CA 的组织信息:国家/地区、州、组织、组织单位和完全限定域名。

    这是服务器的域,它应该与颁发者不同。

    2.5 使用 CSR 和密钥生成证书,并使用 CA 的根密钥对其进行签名

    openssl x509 -req -in <server-name>.csr -CA <issuer-name>.crt -CAkey <issuer-name>.key -CAcreateserial -out <server-name>.crt -days 365 -sha256

    2.6 验证新创建的证书

    openssl x509 -in <server-name>.crt -text -noout

    这将显示包含您输入的信息的证书,您还将看到颁发者数据和主题(服务器名称)。

    2.7 验证您目录中的文件,并确保您拥有以下文件

    <issuer-name>.crt

    <issuer-name>.key

    <server-name>.crt

    <server-name>.key

使用 openssl 单独导出证书

如果您有 pfx 格式的证书,您可以使用 openssl 工具提取所有证书和密钥

  • openssl pkcs12 -in testcert.pfx -nocerts -nodes -out garnet.key
  • 证书

    openssl pkcs12 -in testcert.pfx -clcerts -nokeys -out garnet-cert.crt
  • CA 根证书

    openssl pkcs12 -in testcert.pfx -cacerts -nokeys -chain -out garnet-ca.crt 

受密码保护的会话

Garnet 支持受密码保护的会话,使用 RESP 协议的 AUTH 机制。当您创建 Garnet 服务器时,您可以通过标志 --auth 和您要启用的身份验证类型来指定启用身份验证。以下是启用或禁用受密码保护的连接的选项

  • NoAuth,默认情况下没有密码要求。
    GarnetServer --auth NoAuth
  • Password,指示服务器客户端在发送请求之前应使用 auth 命令和密码。

启动服务器并包含密码

    GarnetServer --auth Password --password <passwordplaceholder>

通过这两个功能,您可以为您的 Garnet 部署获得基本的安全能力。请根据您团队的安全要求检查此功能是否足以满足您的需求。请注意,如果启用了大于内存的数据,我们不会加密溢出到本地磁盘的数据或检查点。我们也不会加密内存中实际提供的数据。