启用HTTPS

为了保护Data Collector中的通信安全,请为以下组件启用HTTPS:

Data Collector
Data Collector启用HTTPS,以确保与Data Collector UI和REST API 的通信安全,并在 Control Hub 管道设计器中将Data Collector用作创作Data Collector。
对于Control Hub云,创作Data Collector必须使用HTTPS协议,因为Control Hub云也使用HTTPS协议。对于本地的Control Hub,创作Data Collector必须使用与Control Hub本地安装相同的协议。
集群管道
如果运行群集管道,请为群集管道启用HTTPS以保护网关和群集中工作节点之间的通信。
连接到外部系统的管道阶段
在管道开发期间,开发人员可以允许特定阶段使用SSL / TLS来保护与外部系统的通信。例如,如果设计一个写入可启用HTTPS的Cassandra集群的管道,则开发人员必须将Cassandra目标配置为使用SSL / TLS连接到Cassandra。
有关在管道阶段启用HTTPS的信息,请参阅SSL / TLS配置。

默认情况下,Data Collector和群集管道使用HTTP协议。StreamSets建议在生产环境中使用HTTPS。HTTPS需要SSL / TLS证书。

先决条件

在为Data Collector和集群管道启用HTTPS之前,请完成以下要求:

获得对OpenSSL和Java密钥工具的访问权限
如果您没有包含由证书颁发机构(CA)签名的SSL / TLS证书的密钥库文件,则可以使用以下工具请求证书并创建密钥库文件:

  • OpenSSL – 使用OpenSSL创建发送到您选择的CA的证书签名请求(CSR),以及创建密钥库和信任库文件。有关更多信息,请参见OpenSSL文档
  • Java keytool – 您还可以使用Java keytool创建CSR以及创建密钥库和信任库文件。Java keytool是Java开发工具包(JDK)的一部分。有关更多信息,请参见keytool文档
生成由证书颁发机构(CA)签名的SSL / TLS证书和私钥对
要为Data Collector启用HTTPS,需要生成一个私钥和公钥对。Data Collector提供了可以使用的自签名证书。但是,Web浏览器通常会发出有关自签名证书的警告。StreamSets强烈建议您生成由CA签名的密钥和证书对。
要为群集管道启用HTTPS,每个工作节点都需要一个证书。您可以生成多个私钥和公用证书对-每个工作节点一对。或者,您可以生成对所有工作程序节点均有效的单个主题备用名称(SAN)证书。Data Collector在集群中的网关节点上运行,因此网关节点使用与为Data Collector生成的证书相同的证书。
重要说明:每个签名的证书都必须包含Data Collector计算机或辅助节点的完全限定域名(FQDN)。
要从受信任的CA获得证书,您必须提供证据证明您是所请求证书的域名的所有者。使用OpenSSL或keytool生成密钥对,然后将证书签名请求(CSR)提交给CA。确切的过程取决于您选择使用的CA – 请参阅CA提供的文档。

步骤1.创建Keystore文件

创建一个密钥库文件,其中包含由CA签名的每个私钥和公用证书对。密钥库用于根据SSL / TLS服务器的请求来验证客户端的身份。

要为Data Collector启用HTTPS,需要创建一个密钥存储文件。

要为集群管道启用HTTPS,每个工作节点都需要一个密钥库文件。如果为每个工作节点生成了唯一的证书,请为每个证书创建一个唯一的密钥库文件。或者,如果您生成了对所有工作节点均有效的SAN证书,请创建一个所有工作节点都可以使用的密钥库文件。Data Collector 在集群中的网关节点上运行,因此网关节点使用您为Data Collector创建的相同密钥库文件。

StreamSets建议以PKCS#12(p12文件)格式创建密钥库。在大多数情况下,CA以PEM格式颁发证书。使用OpenSSL将证书直接导入PKCS#12密钥库。

  1. 使用以下命令将以PEM格式发行的证书和私钥导入到Data Collector的PKCS#12密钥库中:
    openssl pkcs12 -export -in <PEM certificate> -inkey <private key> -out <keystore filename> -name <keystore name> 

    系统将提示您为密钥库文件创建密码。

    例如,以下命令将证书sdc_company_com.pem和私钥sdc_company_com.key转换为名为sdc_company_com.p12的PKCS#12密钥库文件:

    openssl pkcs12 -export -in sdc_company_com.pem -inkey sdc_company_com.key -out sdc_company_com.p12 -name sdc_company_com
  2. Data Collector密钥库文件存储在Data Collector配置目录$SDC_CONF中

    例如,对于Data Collector的RPM安装,我们将sdc_company_com.p12密钥库文件存储在以下目录中:

    /etc/sdc/sdc_company_com.p12
  3. Data Collector密钥库密码存储于Data Collector所使用的默认密码文本文件中,$SDC_CONF/keystore-password.txt
  4. 如果为群集管道启用HTTPS,请对群集中的每个工作节点重复步骤1。
  5. 将每个工作程序密钥库文件存储在集群中每个工作程序节点上的相同绝对位置中。

    例如,如果我们生成了名为sdc_worker.p12的工作程序密钥库文件,则将文件存储在每个工作程序节点上的以下目录中:

    /opt/security/sdc_worker.p12
  6. 将工作程序密钥库密码存储在密码文本文件中,该文本文件在群集中每个工作程序节点上的绝对位置相同。

    例如,我们将keystore-password.txt文件存储在每个辅助节点上的以下目录中:

    /opt/security/keystore-password.txt

步骤2.创建一个Truststore文件

信任库文件包含来自受信任CA的证书,SSL / TLS客户端使用该证书来验证SSL / TLS服务器的身份。

Data Collector 需要一个信任库文件来验证以下SSL / TLS服务器的身份:

  • 安全LDAP服务器,当Data Collector配置为安全LDAP身份验证时。
  • 启用HTTPS的本地安装Control Hub,当Data Collector注册到本地的Control Hub时。
  • 工作节点,当启用HTTPS的Data Collector运行集群管道时

如果您为集群管道启用了HTTPS,则工作节点需要一个信任库文件来验证安装了Data Collector的网关节点的身份。

默认情况下,Data Collector 和辅助节点使用位于$JAVA_HOME/jre/lib/security/cacerts中的默认Java truststore文件 。如果您的证书是由默认Java信任库文件中包含的受信任CA签名的,则无需为Data Collector或辅助节点创建信任库文件,可以跳过此步骤。

如果您的证书是由专用CA签名的,或者不受默认Java信任库信任的,则必须创建一个自定义信任库文件或修改默认Java信任库文件的副本,以将根CA证书和中间CA证书添加到Data Collector和工作节点信任库文件。例如,如果您的组织生成自己的证书,则必须将组织的根证书和中间证书添加到信任库文件中。

您可以创建一个同时由Data Collector和工作节点使用的信任库文件。或者,您可以创建单独的信任库文件。

在这些步骤中,我们显示了如何修改默认信任库文件的副本以将其他CA添加到受信任CA列表中。我们假定同一CA对我们的证书进行了签名,该证书由Data Collector 和集群中的每个工作节点使用。如果多个CA签署了证书,则需要将每个CA添加到信任库文件中。

如果您希望创建自定义信任库文件,请参阅keytool文档

您可以为Data Collector和辅助节点创建以下类型的信任库:

  • Java keystore file (JKS)
  • PKCS #12 (p12 file)
  1. 使用以下命令来设置JAVA_HOME环境变量:
    export JAVA_HOME=<Java home directory>
  2. 使用以下命令来设置SDC_CONF环境变量:
    export SDC_CONF=<Data Collector configuration directory>

    例如,对于RPM安装,请使用:

    export SDC_CONF=/etc/sdc
  3. 使用以下命令将默认的Java truststore文件复制到Data Collector配置目录:
    cp "${JAVA_HOME}/jre/lib/security/cacerts" "${SDC_CONF}/truststore.jks"
  4. 使用以下keytool命令将CA证书导入到信任库文件中:
    keytool -import -file <CA certificate> -trustcacerts -noprompt -alias <CA alias> -storepass <password> -keystore "${SDC_CONF}/truststore.jks"

    例如:

    keytool -import -file  sdc_company_com.pem -trustcacerts -noprompt -alias MyCorporateCA -storepass changeit -keystore "${SDC_CONF}/truststore.jks"
  5. 如果要为群集管道启用HTTPS,请将修改后的信任库文件复制到群集中每个工作节点上的相同绝对位置。

    例如,我们将我们的truststore.jks文件存储在每个工作程序节点上的以下目录中:

    /opt/security/truststore.jks

    然后,将信任库密码存储在群集中每个工作节点上相同绝对位置的密码文本文件中。

    对于我们的示例,我们将密码存储在每个工作程序节点上以下目录中的一个名为truststore-password.txt的文件中:

    /opt/security/truststore-password.txt

步骤3.将Data Collector配置为使用HTTPS

修改Data Collector配置文件sdc.properties,以配置Data Collector以使用安全端口和密钥库文件。如果创建了自定义信任库文件或修改了默认Java信任库文件的副本,请配置Data Collector以使用该信任库文件。

  1. 要定义安全端口和密钥库文件,请在Data Collector配置文件sdc.properties中配置以下属性:
    Data Collector HTTPS属性 描述
    https.port Data Collector的安全端口号。例如18636。

    除-1之外的任何数字均启用安全端口号。

    注意:在配置文件中同时定义了HTTP和HTTPS端口属性时,HTTP端口会反弹到HTTPS端口。
    https.keystore.path 密钥库文件的路径和名称。输入绝对路径或相对于$SDC_CONF 目录的路径。

    在我们的示例中,我们将属性配置如下:

    https.keystore.path=sdc_company_com.p12
    注意:默认目录keystore.jks位于$SDC_CONF提供您可以使用的自签名证书的 目录中。但是,StreamSets强烈建议您生成由受信任的CA签名的证书,如前提条件中所述。
    https.keystore.password 打开密钥库文件的密码。为了保护密码,请将密码存储在外部位置,然后使用函数来检索密码。

    在我们的示例中,我们将密码添加到了Data Collector使用的默认密码文本文件中。因此,我们只需使用默认属性值即可,如下所示:

    https.keystore.password=${file("keystore-password.txt")}
  2. 对于在使用systemd init系统的操作系统上作为服务启动的安装,请编辑 sdc.socket 文件以使用刚定义的相同安全端口。

    sdc.socket文件的位置取决于您如何安装Data Collector

    • 从RPM软件包 – /usr/lib/systemd/system/sdc.socket
    • 从压缩包 – /etc/systemd/system/sdc.socket

    例如,如果您将Data Collector安全端口号定义为18636,则按如下所示修改文件中的这些行:

    [Socket]
    ListenStream=18636
    ListenStream=0.0.0.0:18636
  3. 使用以下命令重新加载systemd管理器配置:
    systemctl daemon-reload
  4. 如果创建了定制信任库文件或修改了默认Java信任库文件的副本供Data Collector使用,请在SDC_JAVA_OPTS环境变量中定义以下选项:
    • javax.net.ssl.trustStore – Data Collector计算机上信任库文件的路径。
    • javax.net.ssl.trustStorePassword – 信任库密码。

    使用安装类型所需的方法来修改环境变量。

    例如,如下定义选项:

    export SDC_JAVA_OPTS="${SDC_JAVA_OPTS} -Djavax.net.ssl.trustStore=/etc/sdc/truststore.jks -Djavax.net.ssl.trustStorePassword=mypassword -Xmx1024m -Xms1024m -server -XX:-OmitStackTraceInFastThrow"

    或者,为避免在导出命令中保存密码,请将密码保存在文本文件中,然后按如下所示定义truststore password选项: -Djavax.net.ssl.trustStorePassword=$(cat passwordfile.txt)

    然后,确保密码文件仅可由执行导出命令的用户读取。

  5. 重新启动Data Collector以启用更改。

步骤4.将集群管道配置为使用HTTPS

要为集群管道启用HTTPS,请将集群中的网关和工作节点配置为使用HTTPS。如果不运行集群管道,则可以跳过此步骤。

修改网关节点上的Data Collector配置文件sdc.properties,以将辅助节点配置为使用存储在每个辅助节点上的密钥库文件。如果创建了自定义信任库文件或修改了默认Java信任库文件的副本,请配置网关节点和辅助节点以使用信任库文件。

  1. 确认您已经完成了将Data Collector配置为使用HTTPS的上一步。
    网关节点使用为Data Collector配置的密钥库文件和密钥库密码 。
  2. 要定义工作节点使用的密钥库文件,请在网关节点上的Data Collector配置文件sdc.properties中配置以下属性:
    集群管道密钥库属性 描述
    https.cluster.keystore.path 辅助节点上密钥库文件的绝对路径和文件名。该文件必须在每个辅助节点上的相同位置。

    在我们的示例中,我们将属性配置如下:

    https.cluster.keystore.path=/opt/security/sdc_worker.p12
    https.cluster.keystore.password 包含工作节点上密钥库文件密码的文件的绝对路径和名称。该文件必须在每个辅助节点上的相同位置。

    在我们的示例中,我们将属性配置如下:

    https.cluster.keystore.password=${file("/opt/security/keystore-password.txt")}
  3. 如果您为集群管道创建了自定义信任库文件或修改了默认Java信任库文件的副本,请在网关节点上的Data Collector配置文件sdc.properties中取消注释并配置以下属性:
    集群管道Truststore属性 描述
    https.truststore.path 网关节点上用于存储证书以信任工作节点身份的信任库文件的路径和名称。输入与为Data Collector配置的信任库文件输入的相同路径。

    在我们的示例中,我们将属性配置如下:

    https.cluster.truststore.path=/etc/sdc/truststore.jks

    如果在Control Hub中注册Data Collector,请使用选项在SDC_JAVA_OPTS环境变量中设置信任库文件的路径和名称 。运行以下命令:Djavax.net.ssl.trustStore

    export SDC_JAVA_OPTS = "-Djavax.net.ssl.trustStore = <path to truststore file> ${SDC_JAVA_OPTS}"
    
    https.truststore.password 包含网关节点上信任库文件密码的文件的密码或路径和名称。输入您为Data Collector配置的相同信任库密码。

    如果配置密码文件的路径,请输入绝对路径或相对于$SDC_CONF目录的路径 。

    在我们的示例中,我们将属性配置如下:

    https.cluster.truststore.password=mypassword
    https.cluster.truststore.path 在工作节点上存储证书以信任网关节点身份的信任库文件的绝对路径和名称。该文件必须在每个辅助节点上的相同位置。

    在我们的示例中,我们将属性配置如下:

    https.cluster.truststore.path=/opt/security/truststore.jks
    https.cluster.truststore.password 包含工作节点上信任库文件密码的文件的绝对路径和名称。该文件必须在每个辅助节点上的相同位置。

    在我们的示例中,我们将属性配置如下:

    https.cluster.truststore.password=${file("/opt/security/truststore-password.txt")}
  4. 重新启动Data Collector以启用更改。