这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

TLS 协议

TLS(传输层安全)是一种加密协议,用于保护服务器、服务器节点以及客户端之间的通信。

启用后,Vertica 数据库和连接到它的客户端将使用 TLS 1.2。

尽管 TLS、SSL 和 TLS/SSL 通常可以互换使用,但 Vertica 文档始终使用 TLS 来引用协议。某些 Vertica 参数和组件使用 SSL,在这些情况下,文档会使用 SSL 来引用这些参数和组件,但这些也可以归类在 TLS 结构下。

启用 TLS 是一个多步骤过程。首先,使用 SECURITY_CONFIG_CHECK 检查您的安全配置的状态。然后,您可以配置 TLS 身份验证记录以拒绝非 TLS 连接。

1 - TLS 概述

要实现安全通信并验证数据完整性,您可以将 Vertica 和数据库客户端配置为使用 TLS。TLS 协议使用密钥和证书交换系统以及受信任的第三方(称为证书颁发机构 (CA))。证书的所有者和依赖于证书的另一方都必须信任 CA 来确认证书持有者的身份。

Vertica 还支持以下使用传输层安全 (TLS) v1.2 协议的身份验证方法。两种方法均会对传输中数据进行加密并验证其完整性:

  • 服务器模式 - 在服务器模式下,客户端在连接之前必须确认服务器的身份。客户端验证服务器的证书和公钥有效并且由客户端的可信 CA 列表中列出的证书颁发机构 (CA) 发布。这有助于防止中间人攻击。

  • 相互模式 - 在相互模式下,客户端和服务器在连接之前必须验证彼此的身份。

除了此部分详述的要求外,您还必须创建 TLS 身份验证记录以拒绝非 TLS 客户端连接。

TLS 握手过程

下面简要概述了客户端在服务器模式 下验证服务器身份时可能使用的“握手”过程。服务器在相互模式 下识别客户端身份时所采取的其他操作也标记为如此。

公钥和私钥对 - 密钥对由客户端和服务器生成。公钥的所有者必须由证书颁发机构验证。密钥对用于加密消息。例如,假设 Alice 想发送机密数据给 Bob。由于她只希望 Bob 读取数据,因此使用 Bob 的公钥加密数据。即使其他人获得了加密数据的访问权限,数据也仍然受到保护。因为只有 Bob 可以访问其相应的私钥,他是唯一可以将 Alice 的加密数据解密为原始形态的人。

证书 - 证书包含公钥,且用于标识密钥的所有者。它们由证书颁发机构 (CA) 颁发。

证书颁发机构 (CA) - 证书颁发机构是验证公钥所有者身份的受信任方。

客户端和服务器随机数 - 客户端随机数和服务器随机数是用于创建共享密钥的随机字符串,如果握手成功,该密钥会对通信进行加密。

  1. 在连接之前,服务器和客户端会生成自己的公钥和私钥对。然后,CA 会将标识证书分发给服务器和客户端,以获取它们各自的公钥。

  2. 客户端将其客户端随机数发送到服务器,并请求获取服务器的证书。

  3. 服务器将其证书和使用其私钥加密的服务器随机数发送给客户端。在相互模式 下,服务器还会请求获取客户端的证书。

  4. 相互模式 下,客户端发送其证书。

  5. 客户端使用证书来验证服务器是否拥有其公钥,然后使用服务器的公钥解密服务器随机数,以验证服务器是否拥有其私钥。

  6. 相互模式 下,服务器使用证书来验证客户端是否拥有其公钥。

  7. 服务器和客户端使用客户端和服务器随机数生成一个新的密码,称为会话密钥,用于加密未来的通信。

1.1 - TLS 配置

TLS 配置是一个数据库对象,它封装了配置 TLS 所需的所有设置和证书。设置 TLS 配置后,您可以通过将其设置为以下一个或多个数据库参数的值来使用该配置,其中每个参数都控制着 Vertica 数据库与客户端或服务器之间某种类型连接的 TLS:

  • ServerTLSConfig

  • HttpsTLSConfig

  • LDAPLinkTLSConfig

  • LDAPAuthTLSConfig

  • InternodeTLSConfig

这些参数默认设置为预定义的 TLS 配置,因此如果您只想配置 TLS,则应使用 ALTER TLS CONFIGURATION 来修改预定义的 TLS 配置。否则,您可以使用 CREATE TLS CONFIGURATION创建自定义 TLS 配置

重用现有 TLS 配置

要重用现有 TLS 配置,请使用 ALTER TLS CONFIGURATION

下表列出了每个 TLS 连接类型参数及其关联的连接类型和预定义的 TLS 配置:

创建自定义 TLS 配置

您可以使用 CREATE TLS CONFIGURATION 创建 TLS 配置。

以下示例将创建一个 TLS 配置,并通过在 ServerTLSConfig 中设置该配置来为客户端-服务器 TLS 启用它:

  • 创建密钥和证书:

    
    -- create CA certificate
    => CREATE KEY k_ca TYPE 'RSA' LENGTH 4096;
    => CREATE CA CERTIFICATE ca
       SUBJECT '/C=US/ST=Massachusetts/L=Cambridge/O=Micro Focus/OU=Vertica/CN=Vertica Root CA'
       VALID FOR 3650
       EXTENSIONS 'nsComment' = 'Vertica generated root CA cert'
       KEY k_ca;
    
    -- create server certificate
    => CREATE KEY k_server TYPE 'RSA' LENGTH 2048;
    => CREATE CERTIFICATE server
        SUBJECT '/C=US/ST=Massachusetts/L=Cambridge/O=Micro Focus/OU=Vertica/CN=Vertica Cluster/emailAddress=example@example.com'
        SIGNED BY ca
        KEY k_server;
    
  • 创建 TLS 配置:

    => CREATE TLS CONFIGURATION new_tls_config CERTIFICATE server_cert TLSMODE 'ENABLE';
    
  • 将 ServerTLSConfig 参数设置为对客户端-服务器 TLS 使用新的 TLS 配置:

    => ALTER DATABASE SET DEFAULT PARAMTER ServerTLSConfig=new_tls_config;
    

1.2 - 生成 TLS 证书和密钥

此页面举例说明如何使用 CREATE KEYCREATE CERTIFICATE 生成证书和密钥。要查看密钥和证书,请查询 CRYPTOGRAPHIC_KEYSCERTIFICATES 系统表。

有关创建签名证书的更多详细信息,OpenSSL 建议使用 OpenSSL 手册

有关 x509 扩展的更多详细信息,请参阅 安全套接字层密码库 (OpenSSL) 文档

导入密钥和证书

如果您打算使用其关联的证书来签署某些内容,例如客户端-服务器 TLS 中的消息或其他证书,则仅需导入私钥。即:只有在关联证书为以下之一时,才需要导入密钥:

  • 客户端/服务器证书

  • 在 Vertica 中用于签署其他证书的 CA 证书

如果仅需 CA 证书来验证其他证书,则无需导入其私钥。

导入私钥:

=> CREATE KEY imported_key TYPE 'RSA' AS '-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----';

证书

要导入仅验证其他证书(无私钥)的 CA 证书:

=> CREATE CA CERTIFICATE imported_validating_ca AS '-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----';

要导入可以验证和签署其他证书的 CA(需要私钥):

=> CREATE CA CERTIFICATE imported_signing_ca AS '-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----'
KEY ca_key;

要导入客户端/服务器证书,您必须导入并指定其私钥和 CA:

=> CREATE CERTIFICATE imported_cert AS '-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----'
SIGNED BY imported_ca KEY imported_key;

生成私钥和证书

要生成 2048 位 RSA 私钥:

=> CREATE KEY new_key TYPE 'RSA' LENGTH 2048;

自签名 CA 证书

CA 是受信任的实体,它们使用 CA 证书来签署和验证其他证书。以下示例将生成自签名的根 CA:

  1. 生成或导入私钥:

    => CREATE KEY SSCA_key TYPE 'RSA' LENGTH 2048;
    
  2. 使用以下格式生成并使用私钥签署证书:

    => CREATE CA CERTIFICATE certificate_name
    SUBJECT '/C=country_code/ST=state_or_province/L=locality/O=organization/OU=org_unit/CN=Vertica Root CA'
    VALID FOR days_valid
    EXTENSIONS 'authorityKeyIdentifier' = 'keyid:always,issuer', 'nsComment' = 'Vertica generated root CA cert'
    KEY ca_key;
    


    例如:

    => CREATE CA CERTIFICATE SSCA_cert
    SUBJECT '/C=US/ST=Massachusetts/L=Cambridge/O=Micro Focus/OU=Vertica/CN=Vertica Root CA'
    VALID FOR 3650
    EXTENSIONS 'nsComment' = 'Self-signed root CA cert'
    KEY SSCA_key;
    

中间 CA 证书

除了服务器证书,CA 还可以签署其他 CA 的证书。此过程将生成中间 CA,且在顶级 CA 和中间 CA 之间生成信任链。随后,这些中间 CA 可以签署其他证书。

  1. 生成或导入签署中间 CA 的 CA。以下示例生成并使用自签名根 CA:

    => CREATE KEY SSCA_key TYPE 'RSA' LENGTH 2048;
    
    => CREATE CA CERTIFICATE SSCA_cert
    SUBJECT '/C=US/ST=Massachusetts/L=Cambridge/O=Micro Focus/OU=Vertica/CN=Vertica Root CA'
    VALID FOR 3650
    EXTENSIONS 'nsComment' = 'Self-signed root CA cert'
    KEY SSCA_key;
    

  2. 生成或导入私钥:

    => CREATE KEY intermediate_key TYPE 'RSA' LENGTH 2048;
    
  3. 生成中间 CA 证书,指定其私钥并使用以下格式签署 CA:

    => CREATE CERTIFICATE intermediate_certificate_name
    SUBJECT '/C=country_code/ST=state_or_province/L=locality/O=organization/OU=org_unit/CN=Vertica intermediate CA'
    SIGNED BY ca_name
    KEY intermediate_key;
    


    例如:

    => CREATE CA CERTIFICATE intermediate_CA
    SUBJECT '/C=US/ST=Massachusetts/L=Cambridge/O=Micro Focus/OU=Vertica/CN=Vertica Intermediate CA'
    SIGNED BY SSCA_cert
    KEY intermediate_key;
    

客户端/服务器证书

CREATE CERTIFICATE 生成 x509v3 证书,允许您指定扩展来限制证书的使用方式。extendedKeyUsage 扩展的值将根据您的用例而有所不同:

  • 服务器证书:

    'extendedKeyUsage' = 'serverAuth'
    
  • 客户证书:

    'extendedKeyUsage' = 'clientAuth'
    
  • 节点间加密的服务器证书:

    'extendedKeyUsage' = 'serverAuth, clientAuth'
    

由于这些证书用于客户端/服务器 TLS,因此您必须导入或生成其私钥。

以下示例证书均由此自签名 CA 证书签名:

=> CREATE KEY SSCA_key TYPE 'RSA' LENGTH 2048;
=> CREATE CA CERTIFICATE SSCA_cert
SUBJECT '/C=US/ST=Massachusetts/L=Cambridge/O=Micro Focus/OU=Vertica/CN=Vertica Root CA'
VALID FOR 3650
EXTENSIONS 'nsComment' = 'Self-signed root CA cert'
KEY SSCA_key;

要生成服务器证书:

=> CREATE KEY server_key TYPE 'RSA' LENGTH 2048;
=> CREATE CERTIFICATE server_cert
SUBJECT '/C=US/ST=Massachusetts/L=Cambridge/O=Micro Focus/OU=Vertica/CN=Vertica server/emailAddress=example@example.com'
SIGNED BY SSCA_cert
EXTENSIONS 'nsComment' = 'Vertica server cert', 'extendedKeyUsage' = 'serverAuth'
KEY server_key;

要生成客户端证书:

=> CREATE KEY client_key TYPE 'RSA' LENGTH 2048;
=> CREATE CERTIFICATE client_cert
SUBJECT '/C=US/ST=Massachusetts/L=Cambridge/O=Micro Focus/OU=Vertica/CN=Vertica client/emailAddress=clientexample@example.com'
SIGNED BY SSCA_cert
EXTENSIONS 'nsComment' = 'Vertica client cert', 'extendedKeyUsage' = 'clientAuth'
KEY client_key;

要生成 节点间 TLS 证书:

=> CREATE KEY internode_key TYPE 'RSA' LENGTH 2048;
=> CREATE CERTIFICATE internode_cert
SUBJECT '/C=US/ST=Massachusetts/L=Cambridge/O=Micro Focus/OU=Vertica/CN=data channel'
SIGNED BY SSCA_cert
EXTENSIONS 'nsComment' = 'Vertica internode cert', 'extendedKeyUsage' = 'serverAuth, clientAuth'
KEY internode_key;

1.3 - 配置客户端-服务器 TLS

Vertica 为客户端-服务器 TLS 提供两种连接模式:

  • 服务器模式 下,客户端必须验证主机的证书。主机必须具有服务器私钥和证书。

  • 相互模式 下,客户端和主机必须各自验证对方的证书。主机必须具有服务器私钥、服务器证书和 CA 证书。

客户端-服务器 TLS 用于保护 Vertica 与客户端之间的连接步骤,而不是将这些客户端作为数据库用户进行身份验证的以下身份验证步骤。要为 TLS 连接配置身份验证或拒绝明文连接,请参阅 TLS 身份验证

使用 TLS 配置设置证书

此过程可为客户端-服务器 TLS 创建密钥和证书,并在预定义的 TLS 配置 server 中设置它们,这是 ServerTLSConfig 和 HttpsTLSConfig 的默认 TLS 配置。要创建自定义 TLS 配置,请参阅TLS 配置

  1. 根据您的用例生成或导入以下内容:

    • 服务器模式:服务器证书私钥、服务器证书

    • 相互模式:服务器证书私钥、服务器证书、CA 证书

  2. 根据您所需的配置运行以下命令。新连接将使用 TLS。

    • 要使用服务器模式,请为服务器的 TLS 配置设置服务器证书:

      => ALTER TLS CONFIGURATION server CERTIFICATE server_cert;
      
    • 要使用相互模式,请设置服务器和 CA 证书。此 CA 证书用于验证客户端证书:

      => ALTER TLS CONFIGURATION server CERTIFICATE server_cert ADD CA CERTIFICATES ca_cert;
      

      要使用多个 CA 证书,请用逗号分隔它们:

      => ALTER TLS CONFIGURATION server CERTIFICATE server_cert
         ADD CA CERTIFICATES intermediate_ca_cert, ca_cert;
      
  3. 启用 TLS(默认情况下禁用)。选择以下按安全性升序列出的 TLSMODE 之一。

    • DISABLE:禁用 TLS。此参数的所有其他选项都启用 TLS。

    • ENABLE:启用 TLS。Vertica 不检查客户端证书。

    • TRY_VERIFY:如果出现以下任一情况,则建立 TLS 连接:

      • 客户出示有效证书

      • 客户没有出示证书

      如果客户端提供无效证书,则连接将使用纯文本。

    • VERIFY_CA:如果 Vertica 验证客户端证书来自受信任的 CA,则连接成功。如果客户端不提供客户端证书,则连接使用纯文本。

    TLS 配置还支持 TLSMODE VERIFY_FULL,但客户端-服务器 TLS 和 HTTPS(参数分别为 ServerTLSConfig 和 HttpsTLSConfig)不支持此 TLSMODE,其行为类似于 VERIFY_CA

    对于服务器模式,选择 ENABLE

    => ALTER TLS CONFIGURATION server TLSMODE 'ENABLE';
    

    对于相互模式,选择 TRY_VERIFY 或更高版本:

    => ALTER TLS CONFIGURATION server TLSMODE 'VERIFY_CA';
    
  4. 验证 ServerTLSConfig 参数是否设置为 server TLS 配置:

    => SHOW CURRENT ServerTLSConfig;
      level  |      name       | setting
    ---------+-----------------+---------
     DEFAULT | HttpsTLSConfig  | server
    (1 row)
    

    如果没有,请设置 ServerTLSConfig 参数:

    => ALTER DATABASE DEFAULT SET ServerTLSConfig = 'server';
    

另请参阅

1.4 - 管理 CA 捆绑包

使用证书颁发机构 (CA) 捆绑包,可以将 CA 证书分组到一起,并使用它们来验证与数据库的连接。

您可以通过查询 CA_BUNDLES 系统表来查看现有 CA 捆绑包。

创建 CA 捆绑包

要创建 CA 捆绑包,请使用 创建 CA 捆绑包 并指定一个或多个 CA 证书。如果您没有指定 CA 证书,则 CA 捆绑包将为空。

此示例创建一个名为 ca_bundle 的 CA 捆绑包,其中包含 CA 证书 root_ca 和 root_ca2:

=> CREATE CA BUNDLE ca_bundle CERTIFICATES root_ca, root_ca2;
CREATE CA BUNDLE

=> SELECT * FROM ca_bundles WHERE name='ca_bundle';
        oid        |   name    |       owner       |              certificates
-------------------+-----------+-------------------+----------------------------------------
 45035996274026954 | ca_bundle | 45035996273704962 | [45035996274026764, 45035996274026766]
(1 row)

修改现有 CA 捆绑包

CA_BUNDLES 仅存储 OID。由于对 CA 捆绑包的操作需要证书和所有者名称,因此可以使用以下查询将捆绑包映射到证书和所有者名称:

=> SELECT user_name AS owner_name,
       owner     AS owner_oid,
       b.name    AS bundle_name,
       c.name    AS cert_name
FROM   (SELECT name,
               STRING_TO_ARRAY(certificates) :: array[INT] AS certs
        FROM   ca_bundles) b
       LEFT JOIN certificates c
              ON CONTAINS(b.certs, c.oid)
       LEFT JOIN users
              ON user_id = owner
ORDER  BY 1;

 owner_name |     owner_oid     | bundle_name  | cert_name
------------+-------------------+--------------+-----------
 dbadmin    | 45035996273704962 | ca_bundle    | root_ca
 dbadmin    | 45035996273704962 | ca_bundle    | ca_cert
(2 rows)

添加和移除 CA 证书

如果您拥有 CA 捆绑包的所有权,则可以使用 ALTER CA BUNDLE 添加和移除证书。

此示例通过添加 ca_cert 和移除 root_ca2 来修改 ca_bundle:

=> ALTER CA BUNDLE ca_bundle ADD CERTIFICATES ca_cert;
ALTER CA BUNDLE

=> SELECT * FROM ca_bundles WHERE name='ca_bundle';
        oid        |   name    |       owner       |                       certificates
-------------------+-----------+-------------------+-----------------------------------------------------------
 45035996274027356 | ca_bundle | 45035996273704962 | [45035996274027342, 45035996274027348, 45035996274027396]
(1 row)

=> ALTER CA BUNDLE ca_bundle REMOVE CERTIFICATES root_ca2;
ALTER CA BUNDLE

=> SELECT * FROM CA_BUNDLES;
        oid        |   name    |       owner       |              certificates
-------------------+-----------+-------------------+----------------------------------------
 45035996274027356 | ca_bundle | 45035996273704962 | [45035996274027342, 45035996274027396]
(1 row)

管理 CA 捆绑包所有权

超级用户和 CA 捆绑包所有者可以通过查询 CA_BUNDLES 系统表来查看捆绑包是否存在,但只有给定捆绑包的所有者才能看到其中的证书。

在以下示例中,dbadmin 用户拥有 ca_bundle。将捆绑包的所有权授予“Alice”后,dbadmin 无法再看到捆绑包中的证书:

=> => SELECT * FROM ca_bundles WHERE name='ca_bundle';
        oid        |   name    |       owner       |              certificates
-------------------+-----------+-------------------+----------------------------------------
 45035996274027356 | ca_bundle | 45035996273704962 | [45035996274027342, 45035996274027396]
(1 row)

=> ALTER CA BUNDLE ca_bundle OWNER TO Alice;
ALTER CA BUNDLE

=> SELECT * FROM ca_bundles WHERE name='ca_bundle';
        oid        |   name    |       owner       | certificates
-------------------+-----------+-------------------+--------------
 45035996274027356 | ca_bundle | 45035996274027586 | []
(1 row)

删除 CA 捆绑包

您必须拥有 CA 捆绑包的所有权才能删除它:

=> DROP CA BUNDLE ca_bundle;
DROP CA BUNDLE

1.5 - 为 MC 生成证书和密钥

证书签名请求 (CSR)”是在使用该证书的服务器上生成的加密文本块。您将证书签名请求发送到一个数字证书认证机构 (CA),用于申请数字身份证书。数字证书认证机构根据您证书上的信息使用证书签名请求创建您的安全套接层 (SSL) 证书;例如组织名称、常用(域)名、城市、国家。

管理控制台 (MC) 使用 OAuth(开放授权)、安全套接字层 (SSL) 和本地加密密码的组合,来保障用户浏览器和 MC 以及 MC 和 代理。身份验证通过 MC 发生,并发生在群集内的代理之间。代理也可对作业进行身份验证和授权。

MC 配置过程会自动设置 SSL,但您必须先在您的 Linux 环境中安装 openssl 程序包。

当通过客户端浏览器连接到 MC 时,Vertica 将为每个 HTTPS 请求分配一个包含时间戳的自签名证书。为增强安全性和防止密码重播攻击,时间戳仅在几秒钟内有效,随后就会过期。

为避免遭到 MC 阻拦,请同步 Vertica 群集内各个主机的时间,以及 MC 主机的时间(如果该主机位于专用服务器上)。要从丢失同步或缺乏同步中恢复,请重新同步系统时间和网络时间协议 (Network Time Protocol)。

创建证书并提交证书用于签名

在产品环境中,永远使用由数字证书认证机构签名的证书。您可以创建并提交证书,并且当数字证书认证机构返回证书时,将证书导入 MC

使用 openssl 命令生成新的 CSR,在提示时输入密码“password”:

$ sudo openssl req -new -key /opt/vconsole/config/keystore.key -out server.csr
Enter pass phrase for /opt/vconsole/config/keystore.key:

您按下回车键 (Enter) 时,将会提示您输入即将纳入您的证书请求的信息。有些字段包含默认值,出于安全考虑,您需要进行更改。其他字段您可以不填写,比如密码和可选择的公司名称。留下空白字段,输入 '.'

证书签名请求中包含此信息,并显示默认值和替换值:

Country Name (2 letter code) [GB]:USState or Province Name (full name) [Berkshire]:Massachusetts
Locality Name (eg, city) [Newbury]: Cambridge
Organization Name (eg, company) [My Company Ltd]:Vertica
Organizational Unit Name (eg, section) []:Information Management
Common Name (eg, your name or your server's hostname) []:console.vertica.com
Email Address []:mcadmin@vertica.com

常用名 (Commonn Name) 字段是您的服务器的完全限定域名。您的词条必须与您在网络浏览器上输入的内容完全匹配,否则您会收到名称不符合错误。

自签证书用于测试

为了测试您的新的安全套接层执行状态,条件允许情况下,您可以使用临时证书或您自己的内部数字证书认证机构,自签一份证书签名请求。

以下命令会生成一份临时证书,证书在 365 天以后到期:

$ sudo openssl x509 -req -days 365 -in server.csr -signkey /opt/vconsole/config/keystore.key -out server.crt
Enter passphrase for /opt/vconsole/config/keystore.key:
Enter same passphrase again:

之前的案例提示您通行短语。这是启动 Apache 必须的步骤。执行通行短语,您必须将安全套接层通行短语对话直接放在恰当的 Apache 配置文件中。更多详细信息,请参见 Apache 文档。

此案例说明到终端窗口的命令输出:

Signature oksubject=/C=US/ST=Massachusetts/L=Cambridge/O=Vertica/OU=IT/
CN=console.vertica.com/emailAddress=mcadmin@vertica.com
Getting Private key

您现在可以将自签名密钥 server.crt 导入管理控制台。

另请参阅

1.6 - 将新证书导入 MC

使用此过程将新证书导入管理控制台。

  1. 连接到管理控制台,然后以管理员身份登录。

  2. 在主页上,单击 MC 设置 (Settings)

  3. 在左侧的按钮面板中,单击 SSL 证书 (SSL certificates)

  4. 在“上传新的 SSL 证书 (Upload a new SSL certificate)”右侧,单击浏览 (Browse) 以导入新密钥。

  5. 单击应用 (Apply)

  6. 重启管理控制台

1.7 - 替换代理证书

代理使用预安装的证书颁发机构 (CA) 证书。您可以将首选证书及其私钥复制到主机来替换它。

查看您当前的代理证书:

$ openssl s_client -prexit -connect database_IP:database_port

生成证书

如果您还没有证书,您可以生成自签名证书。有关详细信息,请参阅 生成 TLS 证书和密钥

  1. 生成私钥和证书。

    $ openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out agent.cert -keyout agent.key
    
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]:US
    State or Province Name (full name) [Some-State]:MA
    Locality Name (eg, city) []:Cambridge
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
    Organizational Unit Name (eg, section) []:IT
    Common Name (e.g. server FQDN or YOUR name) []:*.mycompany.com
    Email Address []:myaddress@mycompany.com
    
  2. 制作 PEM 格式的证书副本。

    $ openssl x509 -in agent.cert -out agent.pem -outform PEM
    
  3. 查看证书。

    $ openssl x509 -in agent.pem -text
    

替换主机上的代理证书

以下过程用于在单个主机上替换代理的当前私钥和证书。要在整个群集中替换此证书和密钥,请对所有主机重复此过程。

  1. 停止主机上的代理服务。

    $ /etc/init.d/vertica_agent stop
    
  2. 备份并重命名现有代理证书和密钥。

    
    $ cd /opt/vertica/config/share
    $ mv agent.cert agent.cert.bck
    $ mv agent.key agent.key.bck
    $ mv agent.p em agent.pem.bck
    
  3. 将新证书和密钥传输到主机的 /opt/vertica/config/share 目录。

    $ scp agent.* root@123.12.12.123:/opt/vertica/config/share
    
  4. 将证书和密钥的所有者更改为 uidbadmin,将组更改为 verticadba

    $ chown installed_Vertica_user:installed_Vertica_group agent.*
    
  5. 将证书和密钥文件设为只读。

    $ chmod -R 400 agent.*
    
  6. 启动代理服务。

    $ /etc/init.d/vertica_agent start
    starting agent
    Opening PID file "/opt/vertica/log/agent.pid".
    Overwriting /opt/vertica/log/agent_uidbadmin.log
    Overwriting /opt/vertica/log/agent_uidbadmin.err
    start OK for user: uidbadmin
    
  7. 验证您是否可以使用 API 密钥查看有关数据库的信息。

    $ curl -X GET https://10.20.80.145:5444/databases -H "VerticaApiKey:wCgXny3Wm+8OhEvGkAclv7v9+VIlxgXblpr4rf" -k
    
  8. 验证代理是否正在使用新证书。

    $ openssl s_client -prexit -connect 10.20.80.145:5444
    

1.8 - 使用 TLS 导入和导出数据

Vertica 使用 TLS 保护客户端和服务器之间的连接和通信。当您在 Vertica 群集之间导入或导出数据时,其中一个群集会充当客户端,这意味着您也可以使用 TLS 来保护该连接。

ImportExportTLSMode 参数控制导入或导出数据时 TLS 的严格性。

默认情况下,ImportExportTLSMode 设置为 PREFER。在此设置下,Vertica 会尝试使用 TLS 并回退到纯文本;您可以将其更改为始终要求加密,并进一步验证每个连接上的证书。有关导入和导出操作期间的 TLS 的更多信息,请参阅配置群集之间的连接安全