文档编写目的本文主要介绍如何在现有的CDP-DC集群上启用TLS。内容概述1) TLS概述2) Level-0:基础TLS/SSL配置(在CM server主机上进行)3) Level-1:为集群启用加密测试环境1) CM和Cloudera Runtime版本为7.1.12) Redhat7.73) 拥有Cloudera Manager的管理员账号4) 集群未启用Kerberos和LDAP认证TLS概述背景部署了Kerberos之后,CM会提示有安全隐患,至少需要一级TLS加密。介绍传输层安全性(TLS)在ClouderaManager服务器和代理之间的通信中提供加密和身份验证。 加密可防止通信侦听,并且身份验证有助于防止恶意服务器或代理在群集中引起问题。Cloudera Manager支持三种级别的TLS安全性,三种必须逐级配置。Cloudera强烈建议您在开始配置Cloudera Manager服务器和代理使用TLS之前,设置完整功能的CDH群集和Cloudera Manager。
目前创新互联公司已为1000+的企业提供了网站建设、域名、网页空间、网站改版维护、企业网站设计、云冈网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。Cloudera Manager将继续接收端口7180上的HTTP请求(默认值),但一旦启用TLS,它将立即将客户端重定向到端口7183以进行HTTPS连接。一旦配置了3级TLS,如果要添加运行代理的新主机,则必须手动部署适用于您的平台的ClouderaManager代理和守护程序软件包,为主机发出新的证书,配置/etc /cloudera-scm-agent/config.ini使用SSL / TLS,然后使主机联机。相反,您可以禁用TLS添加主机,配置TLS的新主机,然后重新启用适当的配置。任何一种方法都是有效的,根据您的需要。对于运行代理的所有主机,Cloudera建议您首先使用Java创建密钥库,然后使用openSSL导出密钥和证书以供代理或色相使用。工具概述Java Keytool和OpenSSL是密钥管理工具,可让您创建TLS / SSL所需的安全工件。
除了下面的两个简短概述之外,有关更多信息,请参见“如何为TLS / SSL证书和密钥转换文件编码(DER,JKS,PEM)”。Java KeytoolOracle Java keytool是Oracle JDK附带的实用程序,用于创建和管理加密密钥和证书。在针对Cloudera Manager集群配置TLS / SSL的过程中,您将创建私有密钥对、密钥库、证书签名请求,并使用此软件工具创建供集群特定使用的信任库,如本指南中各个步骤所述。Cloudera Manager TLS / SSL配置的Java Keytool要求对于使用Java Keytool的任何步骤,请确保:• 使用Oracle Java keytool而非OpenJDK之类的工具。
使用从Oracle下载的JDK或Cloudera Manager服务器主机上此默认路径中的Cloudera提供的Oracle JDK:/usr/java/jdk1.8.0_232-cloudera/bin/jre/lib/security• 所有步骤均使用相同版本的Java keytool。如果主机上安装了多个JDK,请设置PATH 变量,以便首先调用Oracle JDK,如本例所示:export JAVA_HOME=/usr/java/jdk1.8.0_232-clouderaexport PATH=$JAVA_HOME/bin:$PATH• 在任何调用-keypass 和-storepass两个选项的命令中,请使用和相同的密码。Cloudera Manager要求密钥及其密钥库使用相同的密码。OpenSSLOpenSSL是一种开放源代码加密和TLS / SSL工具包,自1999年成立以来已被广泛使用。
与Java Keytool一样,OpenSSL允许您创建私钥,证书请求和密钥库,并提供用于验证证书的选项。在RPC客户端和服务器通信期间,Cloudera Manager Agent主机充当Cloudera Manager Server主机的客户端。代理主机、Hue、Impala和其他基于Python的服务需要PEM格式的密钥和证书(PKCS#8),这就是为什么以下步骤包括使用此工具转换一些JKS工件的原因。有关更多信息,请参见“如何为TLS / SSL证书和密钥转换文件编码(DER,JKS,PEM)”。如何将自签名证书用于TLS自签名证书不应用于生产部署。自签名证书将在密钥生成过程中创建并存储在指定的密钥库中,并且应替换为已签名证书。使用自签名证书要求生成和分发证书,并为证书建立显式信任。
但是,使用自签名证书可以轻松获取用于TLS / SSL配置的证书,并且可能适用于非生产或测试设置。有关更多信息,请参阅为 手动配置 加密 。在下面的命令中为您的系统替换路径,文件名,别名和其他示例。1) 创建证书目录:mkdir -p /opt/cloudera/security/x509/ /opt/cloudera/security/jks/向Cloudera Manager授予对目录的访问权限,设置正确的权限,然后更改为目录:sudo chown -R cloudera-scm:cloudera-scm /opt/cloudera/security/jkssudo umask 0700cd /opt/cloudera/security/jks2) 生成密钥对和自签名证书,并使用与密钥库和storepass相同的密码将所有内容存储在密钥库中,如下所示。将当前主机的FQDN用于CN,以避免引发java.io.IOException: HTTPS hostname wrong 异常。
用适合您的环境的条目替换OU,O,L,ST和C的值:keytool -genkeypair -alias cmhost -keyalg RSA -keysize 2048 -dname "cn=cm01.example.com, ou=Department,o=Company, l=City, st=State, c=US" -keypass password -keystore example.jks -storepass password[root@ip-10-0-0-168 jks]# keytool -genkeypair -alias cmhost -keyalg RSA -keysize 2048 -dname "cn=ap-southeast-1.compute.internal, ou=ipausers,> o=Cloudera, l=Shanghai, st=Shanghai, c=CN" -keypass cloudera -keystore example.jks -storepass clouderaWarning:The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore example.jks -destkeystore example.jks -deststoretype pkcs12".[root@ip-10-0-0-168 jks]#3) 将默认的Java信任库(cacerts)复制到备用系统信任库(jssecacerts):export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdksource /etc/profilesudo cp $JAVA_HOME/jre/lib/security/cacerts $JAVA_HOME/jre/lib/security/jssecacerts4) 从密钥库(example.jks)导出证书。keytool -export -alias cmhost -keystore example.jks -rfc -file selfsigned.cer[root@ip-10-0-0-168 jks]# keytool -export -alias cmhost -keystore example.jks -rfc -file selfsigned.cerEnter keystore password: Certificate stored in file