大数据平台部署------CDH启用TLS加密传输

1.  TLS介绍

1.1.   背景

部署了Kerberos之后,CM会提示有安全隐患,至少需要一级TLS加密。

大数据平台部署------CDH启用TLS加密传输_第1张图片

1.2.  相关知识

传输层安全性(TLS)在ClouderaManager服务器和代理之间的通信中提供加密和身份验证。 加密可防止通信侦听,并且身份验证有助于防止恶意服务器或代理在群集中引起问题。Cloudera Manager支持三种级别的TLS安全性,三种必须逐级配置。

级别1(好) - 此级别仅配置浏览器和ClouderaManager之间以及代理和ClouderaManager服务器之间的加密通信。请参阅仅为Cloudera Manager配置TLS加密,然后按照级别1:为Cloudera Manager代理配置TLS加密,以获取说明。 1级加密可以防止对代理和Cloudera Manager之间的通信进行窥探。

级别2(更好) - 此级别包括代理和服务器之间的加密通信,以及代理对Cloudera Manager服务器证书的强大验证。请参阅第2级:由代理配置ClouderaManager服务器的TLS验证。级别2通过验证由Cloudera Manager服务器提供的证书的信任,为代理提供额外的安全级别。

级别3(最佳) - 代理和服务器之间的加密通信。3级TLS包括代理和服务器之间的加密通信,由代理对Cloudera Manager服务器证书进行强大的验证,并使用自签名或CA签名的证书将代理验证到Cloudera Manager服务器。请参阅第3级:将代理的TLS验证配置到Cloudera Manager服务器。级别3解决了不受信任的网络场景,您需要防止群集服务器被主机上运行的不受信任的代理人欺骗。 Cloudera建议您在启用Kerberos身份验证之前,为不受信任的网络环境配置3级TLS加密。这提供了Cloudera Manager服务器和集群中经过验证的代理之间的keytab的安全通信

Cloudera强烈建议您在开始配置Cloudera Manager服务器和代理使用TLS之前,设置完整功能的CDH群集和Cloudera Manager。Cloudera Manager将继续接收端口7180上的HTTP请求(默认值),但一旦启用TLS,它将立即将客户端重定向到端口7183以进行HTTPS连接。

一旦配置了3级TLS,如果要添加运行代理的新主机,则必须手动部署适用于您的平台的ClouderaManager代理和守护程序软件包,为主机发出新的证书,配置/ etc /   cloudera-scm-agent / config.ini使用SSL / TLS,然后使主机联机。相反,您可以禁用TLS添加主机,配置TLS的新主机,然后重新启用适当的配置。任何一种方法都是有效的,根据您的需要。

对于运行代理的所有主机,Cloudera建议您首先使用Java创建密钥库,然后使用openSSL导出密钥和证书以供代理或色相使用。

2.  Level-0:基础TLS/SSL配置(在CM server主机上进行)

2.1.  获取并部署服务器证书

创建目录安全证书目录

sudo mkdir -p /opt/cloudera/security/pki

把该目录权限交给cloudera-scm

chown -R cloudera-scm:cloudera-scm /opt/cloudera/security/pki

umask 022

cd /opt/cloudera/security/pki

 

2.2.  创建javatruststore

sudo cp $JAVA_HOME/jre/lib/security/cacerts $JAVA_HOME/jre/lib/security/jssecacerts

 

2.3.  生成服务器密钥和CSR

在CM server上用keytool产生一个服务器的密钥和密钥库

keytool -genkeypair -alias $(hostname -f)-server -keyalg RSA -keystore /opt/cloudera/security/pki/$(hostname -f)-server.jks -keysize 2048 -dname "CN=$(hostname -f),OU=Dept,O=Example.com,L=City,ST=State,C=CN" -storepass 123456 -keypass 123456

 

生成CSR

/opt/jdk1.7.0_80/bin/keytool -certreq -alias $(hostname -f)-server -keystore /opt/cloudera/security/pki/$(hostname -f)-server.jks -file /opt/cloudera/security/pki/$(hostname -f)-server.csr -storepass 123456 -keypass 123456

问题:在执行此语句的时候,提示

keytool error:gnu.javax.crypto.keyring.MalformedKeyringException: incorrect magic

原因:系统中存在不同版本的keytool

解决方案:在keytool前加上本机jdk的绝对路径,此处加上/opt/jdk_1.7.0_80/bin/

2.4.  提交CSR给CA,获得数字签名证书,这里采用openssl生成

2.4.1.      给自己签发根证书(根证书个人信息要和即将签署的证书信息相同)

#生成私钥[带密码]

openssl genrsa [-des3] -out ca.key 2048

#生成证书请求文件

openssl req -new -key ca.key -out ca.csr

/#用自己的私钥给自己签发根证书

openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crtrm

 

2.4.2.      给用户签发证书,可以是其他机器也可以是本机

#生成私钥

$openssl genrsa -des3 -out client.key 1024  

#生成证书请求文件 ,在部署tls时,这两部已经完成,直接用第三步命令开始

$openssl req -new -key client.key -out client.csr 

#跟踪最后一次颁发的证书的序列号

echo "01" > /etc/pki/CA/serial

#跟踪已经颁发的证书。我们把它命名为index.txt

touch /etc/pki/CA/index.txt

#签署证书

$openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key

 

2.4.3.      生成pem

#生成pem格式的证书,用于导入导出,通过合并证书文件crt和私钥key完成

cat client.crt client.key> client.pem

 

 

2.5.  导入证书到keystore(此命令不能运行,需要代入接收到证书)

cp cert-file-recd /opt/cloudera/security/pki/$(hostname -f)-server.cert.pem

sudo keytool -importcert -alias $(hostname -f)-server \

-file /opt/cloudera/security/pki/$(hostname -f)-server.cert.pem \

-keystore /opt/cloudera/security/pki/$(hostname -f)-server.jks

 

2.6.  为CMservices配置TLS/SSL信任档案

进CM首页,点集群-->ClouderaManagement Service-->配置-->范围-->服务范围,分别填上$JAVA_HOME/jre/lib/security/jssecacerts和默认密码 changeit,然后保存

大数据平台部署------CDH启用TLS加密传输_第2张图片

大数据平台部署------CDH启用TLS加密传输_第3张图片

2.7.  重启CM

 

 

2.8.  其他方案

若第五部不采用可信的第三方证书机构颁发的证书,可采用openssl生成证书,最后不得已用自签名证书,自签名证书的生成方案如下:

创建目录

mkdir -p /opt/cloudera/security/x509/ /opt/cloudera/security/jks/

转让目录并给予权限

$ sudo chown -R cloudera-scm:cloudera-scm /opt/cloudera/security/jks

$ sudo umask 0700

$ cd /opt/cloudera/security/jks

生成一个服务器的密钥和密钥库

keytool -genkeypair -alias cmhost -keyalg RSA -keysize 2048 -dname "cn=cm01.example.com, ou=Department,o=Company, l=City, st=State, c=US" -keypass 123456 -keystore example.jks -storepass 123456

创建java truststore

cp $JAVA_HOME/jre/lib/security/cacerts $JAVA_HOME/jre/lib/security/jssecacerts

从keystore导入证书

keytool -export -alias cmhost -keystore example.jks -rfc -file selfsigned.cer

复制自签名证书

cp selfsigned.cer /opt/cloudera/security/x509/cmhost.pem

把公钥导入trusestore(每台机器都要进行)

keytool -import -alias cmhost -file /opt/cloudera/security/jks/selfsigned.cer -keystore $JAVA_HOME/jre/lib/security/jssecacerts -storepass changeit

重命名keystore

mv /opt/cloudera/security/jks/example.jks /opt/cloudera/security/jks/cmhost-keystore.jks

问题1:提示证书不匹配,认证不通过等问题

解决办法: 重新生成cer证书并导入truststore,之后必需要重启CM service

 

问题2:提示主机名不匹配,必须要是node2

解决办法:重新生成密钥和密钥库,其中域名修改为node2

keytool -genkeypair -alias cmhost -keyalg RSA -keysize 2048 -dname "cn=node2, ou=JJDepartment,o=JJ, l=Beijing, st=Haidian, c=ZN" -keypass 123456 -keystore example.jks -storepass 123456

 

然后进入CM首页,点击管理,搜索keystore,填上jks文件的路径和keystore的密码,再搜索tls,进入修改对AdminConsole使用tls加密

大数据平台部署------CDH启用TLS加密传输_第4张图片

大数据平台部署------CDH启用TLS加密传输_第5张图片

3.  Level-1:为集群启用加密

3.1.  前置条件(level-0部署完毕)

3.2.  给CMagent启动TLS

CM首页-->管理-->设置-->安全,搜索tls,勾上为代理使用TLS加密(此处代理的英文原文是agent,机翻成代理,实为客户端)

 

3.3.  修改CMagent的配置(每台)

vim /etc/cloudera-scm-agent/config.ini

#找到[Security],将use_tls设置为1

3.4.  重启CMserver 和CM agent

/etc/init.d/cloudera-scm-server restart

/etc/init.d/cloudera-scm-agent restart   #每台agent都要运行

 

3.5.  检查运行状况:

在重启CM server 和CM Agent之后,打开CM首页,选择主机,所有主机,查看上一次检测信号,应全为良好,同时配置问题中,没有“要求至少TLS1级”的常规警告。

可能遇到的问题是上一次检测信号均为不良,此时查看agent日志,提示错误的主机名,原因是证书中的主机名是node2,但是vim /etc/cloudera-scm-agent/config.ini中主机名是192.168.159.11,将该ip修改为node2既可解决

大数据平台部署------CDH启用TLS加密传输_第6张图片

后续可能还有始终偏差问题,可能原因是添加了agent和server的加密之后,server与agent通信延时更高,突破了阈值,可以提高这个阈值或者抑制这个问题。

你可能感兴趣的:(平台搭建,TLS,CDH)