启用 HTTPS
数据收集器
启用数据收集器 HTTPS 以保护与数据收集器 UI 和 REST API 的通信,并将数据收集器用作控制中心管道设计器中的创作数据收集器。
对于控制中心云,创作数据收集器必须使用 HTTPS 协议,因为控制中心云也使用 HTTPS 协议。对于控制中心本地,创作数据收集器必须使用与控制中心本地安装相同的协议。
群集管道
如果运行群集管道,请为群集管道启用 HTTPS,以保护网关和群集中辅助角色节点之间的通信。
连接到外部系统的管道级
在管道开发期间,开发人员可以启用特定阶段以使用 SSL/TLS 来保护与外部系统的通信。例如,如果设计一个管道,该管道写入启用了 HTTPS 的卡桑德拉群集,则开发人员必须将卡桑德拉目标配置为使用 SSL/TLS 连接到卡桑德拉。
有关为管道阶段启用 HTTPS 的信息,请参阅 SSL/TLS 配置。
默认情况下,数据收集器和群集管道使用 HTTP 协议。流集建议在生产环境中使用 HTTPS。HTTPS 需要 SSL/TLS 证书。
先决条件
在为数据收集器和群集管道启用 HTTPS 之前,请完成以下要求:
获取对开放SSL和 Java 键盘工具的访问权限
如果您没有包含由证书颁发机构 (CA) 签名的 SSL/TLS 证书的密钥库文件,则可以使用以下工具请求证书并创建密钥库文件:- OpenSSL - 使用 OpenSSL 创建证书签名请求 (CSR),并将其发送到您选择的 CA,以及创建密钥库和信任库文件。有关更多信息,请参阅开放SSL 文档。
- Java 密钥工具 - 您还可以使用 Java 密钥工具创建 CSR 以及创建密钥库和信任库文件。Java 键盘工具是 Java 开发工具包 (JDK) 的一部分。有关详细信息,请参阅键盘工具文档。
生成由证书颁发机构 (CA) 签名的 SSL/TLS 证书和私钥对
若要为数据收集器启用 HTTPS,请为数据收集器生成单个私钥和公共证书对。数据收集器提供您可以使用的自签名证书。但是,Web 浏览器通常会对自签名证书发出警告。流集强烈建议您生成由 CA 签名的密钥和证书对。
若要为群集管道启用 HTTPS,每个工作节点都需要一个证书。您可以生成多个私钥和公共证书对 - 每个工作线程节点一个。或者,您可以生成对所有辅助角色节点有效的单个使用者备用名称 (SAN) 证书。数据收集器在群集中的网关节点上运行,因此网关节点使用为数据收集器生成的相同证书。
要从受信任的 CA 获取证书,您必须提供证明,证明您是为其请求证书的域名的所有者。使用 OpenSSL 或密钥工具生成密钥对,然后向 CA 提交证书签名请求 (CSR)。确切的过程取决于您选择使用的 CA - 请参阅 CA 提供的文档。
步骤 1.创建密钥库文件
创建一个密钥库文件,其中包含由 CA 签名的每个私钥和公有证书对。密钥库用于在 SSL/TLS 服务器发出请求时验证客户机的身份。
要为数据收集器启用 HTTPS,请为数据收集器创建单个密钥库文件。
要为集群管道启用 HTTPS,每个工作节点都需要一个密钥库文件。如果您为每个工作线程节点生成了唯一证书,请为每个证书创建唯一的密钥库文件。或者,如果您生成了对所有工作线程节点都有效的 SAN 证书,请创建所有工作线程节点都可以使用的单个密钥库文件。数据收集器在群集中的网关节点上运行,因此网关节点使用您为数据收集器创建的相同密钥库文件。
流集建议以 PKCS #12(p12 文件)格式创建密钥库。在大多数情况下,CA 以 PEM 格式颁发证书。使用开放SSL将证书直接导入到 PKCS #12 密钥库中。
- 使用以下命令将 PEM 格式颁发的证书和私钥导入数据收集器的 PKCS #12 密钥库:
<span style="color:#333333"><span style="background-color:#eeeeee"><code>openssl pkcs12 -export -in <PEM certificate> -inkey <private key> -out <keystore filename> -name <keystore name> </code></span></span>
系统将提示您为密钥库文件创建密码。
例如,以下命令将证书 sdc_company_com.pem 和私钥sdc_company_com.key转换为名为 sdc_company_com.p12 的 PKCS #12 密钥库文件:<span style="color:#333333"><span style="background-color:#eeeeee"><code>openssl pkcs12 -export -in sdc_company_com.pem -inkey sdc_company_com.key -out sdc_company_com.p12 -name sdc_company_com</code></span></span>
- 将数据收集器密钥库文件存储在数据收集器配置目录 $SDC_CONF。
例如,对于数据收集器的 RPM 安装,我们将sdc_company_com.p12 密钥库文件存储在以下目录中:
<span style="color:#333333"><span style="background-color:#eeeeee"><code>/etc/sdc/sdc_company_com.p12</code></span></span>
- 将数据收集器密钥库密码存储在数据收集器使用的缺省密码文本文件中,$SDC_CONF/密钥库密码.txt。
- 如果为群集管道启用 HTTPS,请对群集中的每个辅助角色节点重复步骤 1。
- 将每个工作线程密钥库文件存储在群集中每个工作线程节点上的同一绝对位置。
例如,如果我们生成名为 sdc_worker.p12 的工作线程密钥库文件,则会将这些文件存储在每个工作线程节点上的以下目录中:
<span style="color:#333333"><span style="background-color:#eeeeee"><code>/opt/security/sdc_worker.p12</code></span></span>
- 将工作线程密钥库密码存储在密码文本文件中,该文件位于集群中每个工作线程节点上的同一绝对位置。
例如,我们将密钥库密码.txt文件存储在每个工作线程节点上的以下目录中:
<span style="color:#333333"><span style="background-color:#eeeeee"><code>/opt/security/keystore-password.txt</code></span></span>
步骤2.创建信任库文件
信任库文件包含来自受信任 CA 的证书,SSL/TLS 客户机使用这些证书来验证 SSL/TLS 服务器的身份。
- 当数据收集器配置为安全 LDAP 身份验证时,安全 LDAP 服务器。
- 当数据收集器注册到本地控制中心时,为 HTTPS 启用了控制中心本地安装。
- 数据收集器运行时启用了 HTTPS 的群集管道时的工作线程节点。
如果已为群集管道启用了 HTTPS,则工作线程节点需要信任库文件来验证安装了数据收集器的网关节点的身份。
缺省情况下,数据收集器和工作器节点使用位于 $JAVA_HOME/jre/lib/安全性/存储中的缺省 Java 信任库文件。如果证书由缺省 Java 信任库文件中包含的可信 CA 签名,则无需为数据收集器或工作线程节点创建信任库文件,并且可以跳过此步骤。
如果您的证书由私有 CA 签名或不受缺省 Java 信任库的信任,那么必须创建自定义信任库文件或修改缺省 Java 信任库文件的副本,以便将根 CA 证书和中间 CA 证书添加到数据收集器和工作节点信任库文件中。例如,如果您的组织生成自己的证书,则必须将组织的根证书和中间证书添加到信任库文件中。
您可以创建数据收集器和工作线程节点使用的单个信任库文件。或者,您可以创建单独的信任库文件。
在这些步骤中,我们将展示如何修改缺省信任库文件的副本,以将其他 CA 添加到受信任的 CA 列表中。我们假设同一 CA 对数据收集器和群集中的每个工作节点使用的证书进行了签名。如果有多个 CA 签署了您的证书,则需要将每个 CA 添加到信任库文件中。
如果您希望创建自定义信任库文件,请参阅 keytool 文档。
- Java 密钥库文件 (JKS)
- PKCS #12 (p12 文件)
- 使用以下命令设置JAVA_HOME环境变量:
<span style="color:#333333"><span style="background-color:#eeeeee"><code>export JAVA_HOME=<Java home directory></code></span></span>
- 使用以下命令设置SDC_CONF环境变量:
<span style="color:#333333"><span style="background-color:#eeeeee"><code>export SDC_CONF=<Data Collector configuration directory></code></span></span>
例如,对于 RPM 安装,请使用:
<span style="color:#333333"><span style="background-color:#eeeeee"><code>export SDC_CONF=/etc/sdc</code></span></span>
- 使用以下命令将缺省 Java 信任库文件复制到数据收集器配置目录:
<span style="color:#333333"><span style="background-color:#eeeeee"><code>cp "${JAVA_HOME}/jre/lib/security/cacerts" "${SDC_CONF}/truststore.jks"</code></span></span>
- 使用以下密钥工具命令将 CA 证书导入到信任库文件中:
<span style="color:#333333"><span style="background-color:#eeeeee"><code>keytool -import -file <CA certificate> -trustcacerts -noprompt -alias <CA alias> -storepass <password> -keystore "${SDC_CONF}/truststore.jks"</code></span></span>
例如:<span style="color:#333333"><span style="background-color:#eeeeee"><code>keytool -import -file sdc_company_com.pem -trustcacerts -noprompt -alias MyCorporateCA -storepass changeit -keystore "${SDC_CONF}/truststore.jks"</code></span></span>
- 如果要为集群管道启用 HTTPS,请将修改后的信任库文件复制到集群中每个工作线程节点上的同一绝对位置。
例如,我们将信任库 .jks 文件存储在每个工作线程节点上的以下目录中:
<span style="color:#333333"><span style="background-color:#eeeeee"><code>/opt/security/truststore.jks</code></span></span>
然后将信任库密码存储在密码文本文件中,该文件位于集群中每个工作线程节点上的同一绝对位置。
对于我们的示例,我们将密码存储在名为 truststore-password.txt位于每个工作线程节点上的以下目录中:<span style="color:#333333"><span style="background-color:#eeeeee"><code>/opt/security/truststore-password.txt</code></span></span>
第3步.将数据收集器配置为使用 HTTPS
修改数据收集器配置文件 sdc.properties,以将数据收集器配置为使用安全端口和密钥库文件。如果您创建了定制信任库文件或修改了缺省 Java 信任库文件的副本,请将数据收集器配置为使用该信任库文件。
- 要定义安全端口和密钥库文件,请在数据收集器配置文件 sdc.properties 中配置以下属性:
数据收集器属性 描述: __________ 端口 数据收集器的安全端口号。例如,18636。 除 -1 以外的任何数字都将启用安全端口号。
注意:在配置文件中同时定义 HTTP 和 HTTPS 端口属性时,HTTP 端口将反弹到 HTTPS 端口。密钥库 密钥库文件的路径和名称。输入绝对路径或相对于目录的路径。 $SDC_CONF
在我们的示例中,我们将按如下方式配置属性:
<span style="color:#333333"><code>https.keystore.path=sdc_company_com.p12</code></span>
密钥库 用于打开密钥库文件的密码。若要保护密码,请将密码存储在外部位置,然后使用函数检索密码。 在我们的示例中,我们将密码添加到数据收集器使用的默认密码文本文件中。因此,我们只需按如下方式使用默认属性值:<span style="color:#333333"><code>https.keystore.password=${file("keystore-password.txt")}</code></span>
- 对于在使用 systemd init 系统的操作系统上作为服务启动的安装,请编辑 sdc.socket 文件以使用您刚刚定义的相同安全端口。
该文件的位置取决于您安装数据收集器的方式:
sdc.socket
- 从 RPM 包中 -
/usr/lib/systemd/system/sdc.socket
- 从压缩包 -
/etc/systemd/system/sdc.socket
例如,如果将数据收集器安全端口号定义为 18636,请按如下方式修改文件中的这些行:<span style="color:#333333"><span style="background-color:#eeeeee"><code>[Socket] ListenStream=18636 ListenStream=0.0.0.0:18636</code></span></span>
- 从 RPM 包中 -
- 使用以下命令重新加载 systemd 管理器配置:
<span style="color:#333333"><span style="background-color:#eeeeee"><code>systemctl daemon-reload</code></span></span>
- 如果创建了定制信任库文件或修改了供数据收集器使用的缺省 Java 信任库文件的副本,请在SDC_JAVA_OPTS环境变量中定义以下选项:
- javax.net.ssl.trustStore- 数据收集器计算机上信任库文件的路径。
- javax.net.ssl.trustStorePassword- 信任库密码。
使用安装类型所需的方法修改环境变量。
例如,按如下方式定义选项:<span style="color:#333333"><span style="background-color:#eeeeee"><code>export SDC_JAVA_OPTS="${SDC_JAVA_OPTS} <strong><span style="color:#323232">-Djavax.net.ssl.trustStore=/etc/sdc/truststore.jks -Djavax.net.ssl.trustStorePassword=mypassword</span></strong> -Xmx1024m -Xms1024m -server -XX:-OmitStackTraceInFastThrow"</code></span></span>
或者,要避免在导出命令中保存密码,请将密码保存在文本文件中,然后定义信任库密码选项,如下所示:-Djavax.net.ssl.trustStorePassword=$(cat passwordfile.txt)
然后,确保密码文件只能由执行导出命令的用户读取。
- 重新启动数据收集器以启用更改。
步骤 4.将群集管道配置为使用 HTTPS
若要为群集管道启用 HTTPS,请将群集中的网关和辅助角色节点配置为使用 HTTPS。如果不运行群集管道,则可以跳过此步骤。
修改网关节点上的数据收集器配置文件 sdc.properties,以将工作线程节点配置为使用存储在每个工作节点上的密钥库文件。如果您创建了定制信任库文件或修改了缺省 Java 信任库文件的副本,请将网关和工作线程节点配置为使用该信任库文件。
- 验证是否已完成上一步以将数据收集器配置为使用 HTTPS。
网关节点使用为数据收集器配置的密钥库文件和密钥库密码。
- 要定义工作线程节点使用的密钥库文件,请在网关节点上的数据收集器配置文件 sdc.properties 中配置以下属性:
集群管道密钥库属性 描述: __________ path 工作线程节点上密钥库文件的绝对路径和文件名。该文件必须位于每个工作线程节点上的同一位置。 在我们的示例中,我们将按如下方式配置属性:
<span style="color:#333333"><code>https.cluster.keystore.path=/opt/security/sdc_worker.p12</code></span>
https.cluster.keystore.密码 包含工作线程节点上密钥库文件的密码的文件的绝对路径和名称。该文件必须位于每个工作线程节点上的同一位置。 在我们的示例中,我们将按如下方式配置属性:<span style="color:#333333"><code>https.cluster.keystore.password=${file("/opt/security/keystore-password.txt")}</code></span>
- 如果为集群管道创建了定制信任库文件或修改了缺省 Java 信任库文件的副本,请在网关节点上的数据收集器配置文件 sdc.properties 中取消注释并配置以下属性:
群集管道信任库属性 描述: __________ 信任库 网关节点上信任库文件的路径和名称,该文件存储证书以信任工作线程节点的身份。输入的路径与您为数据收集器配置的信任库文件输入的路径相同。 在我们的示例中,我们将按如下方式配置属性:
<span style="color:#333333"><code>https.cluster.truststore.path=/etc/sdc/truststore.jks</code></span>
信任库 包含网关节点上信任库文件的密码的文件的密码或路径和名称。输入您为数据收集器配置的相同信任库密码。 如果配置密码文件的路径,请输入绝对路径或相对于目录的路径。
$SDC_CONF
在我们的示例中,我们将按如下方式配置属性:<span style="color:#333333"><code>https.cluster.truststore.password=mypassword</code></span>
信任库 存储证书的工作线程节点上信任库文件的绝对路径和名称,以信任网关节点的身份。该文件必须位于每个工作线程节点上的同一位置。 在我们的示例中,我们将按如下方式配置属性:
<span style="color:#333333"><code>https.cluster.truststore.path=/opt/security/truststore.jks</code></span>
信任库 包含工作线程节点上信任库文件的密码的文件的绝对路径和名称。该文件必须位于每个工作线程节点上的同一位置。 在我们的示例中,我们将按如下方式配置属性:<span style="color:#333333"><code>https.cluster.truststore.password=${file("/opt/security/truststore-password.txt")}</code></span>
- 重新启动数据收集器以启用更改。