1. 程式人生 > >Cloudera Manager配置TLS加密

Cloudera Manager配置TLS加密

目錄

在叢集配置身份驗證和授權時,Cloudera Manager Server會通過網路將敏感資訊傳送到叢集主機,例如Kerberos keytabs和包含密碼的配置檔案。要確保傳輸安全,必須在Cloudera Manager Server和所有群集主機之間配置TLS加密。

TLS加密還用於使用HTTPS保護與Cloudera Manager管理介面的客戶端連線。

Cloudera Manager還支援TLS身份驗證。如果沒有證書身份驗證,惡意使用者可以通過安裝Cloudera Manager Agent軟體並將其配置為與Cloudera Manager Server進行通訊,將主機新增到Cloudera Manager。要防止這種情況,您必須在每個代理主機上安裝證書,並將Cloudera Manager Server配置為信任這些證書。

本本介紹如何為Cloudera Manager配置和啟用TLS加密和證書身份驗證。提供的示例是使用內部證書頒發機構(CA)對所有TLS證書進行簽名,因此本指南還向您展示瞭如何與CA建立信任。(對於由受信任的公共CA簽名的證書,不需要建立信任,因為Java Development Kit(JDK)已經信任它們。)

一、生成TLS證書

證書可以使用表下面三種方式進行簽名:

型別 說明
公共CA簽名證書 推薦。此類證書由公共證書頒發機構(CA)(如Symantec或Comodo)簽名。公共CA是受信任的第三方,其證書可通過可公開訪問的信任鏈進行驗證。使用此型別的證書可以簡化部署,因為安全基礎結構(例如根CA)已包含在Java JDK及其預設信任庫中。有關詳細資訊,請參閱生成TLS證書
內部CA簽名證書 此類證書由您組織的內部CA簽名。使用OpenSSL證書頒發機構
Microsoft Active Directory證書服務或其他內部CA系統的組織可以使用此型別的證書。有關使用內部CA簽名證書進行配置的詳細資訊,請參閱如何為Cloudera Manager配置TLS加密
自簽名證書 不建議用於生產部署。自簽名證書可用於非生產部署,例如概念驗證設定。有關詳細資訊,請參閱使用TLS的自簽名證書

下面過程是使用內部證書頒發機構(CA),並說明如何為該內部CA建立信任。如果您使用受信任的公共A(例如Symantec,GeoTrust,Comodo和其他),則無需為已頒發的證書明確建立信任,除非您使用的是較舊的DK和較新的公共CA。預設情況下,較舊的JDK可能不信任較新的公共CA。

叢集中的每臺主機(包括Cloudera Manager Server主機)完成以下配置

  1. 配置環境變數JAVA_HOME

    export JAVA_HOME=/usr/java/jdk1.8.0_162 
    
    source /etc/profile
    
  2. 建立 /opt/cloudera/security/pki 目錄

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

    如果選擇使用其他目錄,請確保在所有群集主機上使用相同的目錄以簡化管理和維護。

  3. 生成證書
    使用keytool生成Java金鑰庫和簽名證書請求(CSR)。修改下面OU(部門), O(公司名), L(城市), ST(省)、C (國家)的值。
    切記使用相同的keystore password 和 key password。Cloudera Manager不支援為金鑰和金鑰庫使用不同的密碼。

    $JAVA_HOME/bin/keytool -genkeypair -alias $(hostname -f) -keyalg RSA -keystore /opt/cloudera/security/pki/$(hostname -f).jks -keysize 2048 -dname "CN=$(hostname -f),OU=data,O=Hinabian,L=ShenZhen,ST=GuangDong,C=CN" -ext san=dns:$(hostname -f)
    
    $JAVA_HOME/bin/keytool -certreq -alias $(hostname -f) -keystore /opt/cloudera/security/pki/$(hostname -f).jks -file /opt/cloudera/security/pki/$(hostname -f).csr -ext san=dns:$(hostname -f)
    

    示例:

    [[email protected] pki]# $JAVA_HOME/bin/keytool -genkeypair -alias $(hostname -f) -keyalg RSA -keystore /opt/cloudera/security/pki/$(hostname -f).jks -keysize 2048 -dname "CN=$(hostname -f),OU=Engineering,O=Cloudera,L=Palo Alto,ST=California,C=US" -ext san=dns:$(hostname -f)
    Enter keystore password:  
    Re-enter new password: 
    Enter key password for <node00>
    (RETURN if same as keystore password):  
    Re-enter new password: 
    
    Warning:
    The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry 	standard format using "keytool -importkeystore -srckeystore /opt/cloudera/security/pki/node00.jks -	destkeystore /opt/cloudera/security/pki/node00.jks -deststoretype pkcs12".
    [[email protected] pki]# 
    
    [root@node00 pki]# $JAVA_HOME/bin/keytool -certreq -alias $(hostname -f) -keystore /opt/cloudera/security/pki/$(hostname -f).jks -file /opt/cloudera/security/pki/$(hostname -f).csr -ext san=dns:$(hostname -f)
    Enter keystore password:  
    
    Warning:
    The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry 	standard format using "keytool -importkeystore -srckeystore /opt/cloudera/security/pki/node00.jks -	destkeystore /opt/cloudera/security/pki/node00.jks -deststoretype pkcs12".
    [root@node00 pki]# 
    
  4. 提交CSR檔案

    提交CSR檔案(例如: cm01.example.com.csr)到您的證書頒發機構獲取伺服器證書,建議使用PEM(Base64 ASCII)格式證書。

    生成並建立自簽名證書
    見博文:OpenSSL生成並使用CA根證書籤名Keytool生成的證書請求

  5. 將簽名證書複製到/opt/cloudera/security/pki/$(hostname -f).pem

    [[email protected] security]# cp node00.pem /opt/cloudera/security/pki/$(hostname -f).pem
    
  6. 檢查簽名證書

    驗證是否存在伺服器和客戶端身份驗證選項

    openssl x509 -in /opt/cloudera/security/pki/$(hostname -f).pem -noout -text
    

    示例:

    [[email protected] pki]# openssl x509 -in /opt/cloudera/security/pki/$(hostname -f).pem -noout -text
    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number: 1 (0x1)
        Signature Algorithm: sha256WithRSAEncryption
            Issuer: C=CN, ST=GuangDong, L=ShenZhen, O=Hinabian, OU=data, CN=node02
            Validity
                Not Before: Oct 24 08:54:57 2018 GMT
                Not After : Oct 21 08:54:57 2028 GMT
            Subject: C=CN, ST=GuangDong, O=Hinabian, OU=data, CN=node02
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                    Public-Key: (2048 bit)
                    Modulus:
                        00:a4:9c:be:6f:ac:4c:d6:59:e9:37:da:e2:55:25:
                        6c:7b:b7:84:2f:f7:70:33:ba:a4:f4:98:9f:e5:6c:
                        f8:70:76:1e:97:02:b7:73:be:60:48:ee:2c:80:fb:
                        bf:60:9e:75:1f:7f:e1:1a:f9:9d:34:14:cc:17:d2:
                        79:5b:06:a7:c2:29:20:9a:3e:78:ef:ba:2a:43:7a:
                        cb:d5:d7:d7:3c:50:ae:57:97:65:21:f3:e3:98:f5:
                        b0:ad:1b:ed:3d:41:d0:8c:45:49:a2:de:8f:8d:11:
                        63:0a:d9:47:55:dc:36:13:4e:c5:11:4d:e6:f2:59:
                        48:73:20:9a:e0:07:d5:29:7f:72:fb:cd:a1:e8:6e:
                        1e:d2:5e:af:8a:f0:30:6c:58:29:bc:02:62:53:50:
                        a1:80:ef:21:c2:de:1b:14:d3:43:50:c5:6d:90:16:
                        b0:70:2d:5c:8f:74:47:aa:b2:e0:45:fd:f0:d7:a8:
                        f5:28:2b:dc:99:f1:42:c4:a3:8e:39:c2:2f:10:39:
                        5f:7e:f1:58:61:d2:b8:d4:1c:95:ec:59:2c:02:7a:
                        4a:79:7c:fb:75:ce:6c:48:56:c4:00:c2:a0:ad:1e:
                        b1:bb:36:d7:cb:5d:62:0a:ce:31:bd:4e:82:9b:6e:
                        1f:7a:8d:76:c6:42:f7:c6:24:3a:62:b1:70:7d:8d:
                        84:01
                    Exponent: 65537 (0x10001)
            X509v3 extensions:
                X509v3 Basic Constraints: 
                    CA:FALSE
                Netscape Comment: 
                    OpenSSL Generated Certificate
                X509v3 Subject Key Identifier: 
                    58:30:7D:B3:7E:85:D4:39:22:2F:B3:96:55:A3:38:68:FE:7F:03:88
                X509v3 Authority Key Identifier: 
                    DirName:/C=CN/ST=GuangDong/L=ShenZhen/O=Hinabian/OU=data/CN=node02
                    serial:E1:40:B9:DB:A9:83:F9:C3
    
        Signature Algorithm: sha256WithRSAEncryption
             2b:68:77:99:f4:ff:68:df:de:6d:22:d9:db:b0:b8:c6:ce:90:
             c5:ce:e4:f4:27:53:f1:34:35:00:75:83:0a:8f:5f:21:27:36:
             41:ab:6a:22:e5:6e:a1:0a:98:02:9e:16:b4:c6:6c:d9:f3:32:
             29:24:8b:46:15:0d:1d:56:51:d8:8e:91:16:99:56:9c:ee:8b:
             41:cb:b3:29:96:78:9e:a3:5a:5a:60:5c:81:cd:09:ba:ef:dc:
             c2:1b:f2:98:57:c8:9b:3a:ea:91:a5:09:3b:f8:81:ba:3f:17:
             b8:ea:d4:ad:2a:aa:5d:6b:0e:9c:91:46:02:c9:d5:04:a5:3c:
             b9:45:ea:dc:f8:0b:e3:56:ae:8e:fb:c0:f0:ed:3d:9e:36:95:
             c7:43:2f:b8:4e:77:95:7f:ab:e3:48:50:eb:fa:1d:93:50:41:
             a5:e8:25:7e:29:6e:d3:d5:ae:64:4b:65:c5:99:28:00:03:d1:
             a5:a0:1c:4f:03:fa:e7:5b:55:c4:89:98:6c:11:d0:2c:6e:88:
             6a:c2:dd:50:37:cc:3a:25:d6:6e:82:25:dc:56:09:54:0d:77:
             d0:88:ab:0e:5f:25:50:b4:b5:af:6d:74:4a:81:bf:43:9d:04:
             e5:55:6a:60:c3:a0:c8:03:45:d8:ad:7f:ec:59:79:aa:1f:dc:
             0f:6f:3b:fc
    [[email protected] pki]# 
    
  7. CA證書複製
    注意:如果您有包含根CA和中間CA證書的連鎖檔案,請沿著檔案拆分檔案END CERTIFICATE/BEGIN CERTIFICATE邊界到單個檔案。如果有多箇中間CA證書,請使用唯一的檔名,例如 intca-1.pem, intca-2.pem等等。

    1. 將根CA證書複製到 /opt/cloudera/security/pki/rootca.pem
      [root@node01 security]# cp ca.crt /opt/cloudera/security/pki/rootca.pem
      
    2. 中間CA證書複製/opt/cloudera/security/pki/intca.pem
      [root@node01 security]# cp intca.crt /opt/cloudera/security/pki/intca.pem 
      
  8. 複製JDK cacerts中 歸檔到 jssecacerts

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

    注意:cacerts的預設密碼是 changeit , 如需修改,Cloudera 建議使用以下命令來更改密碼。

    $JAVA_HOME/bin/keytool -storepasswd -keystore $JAVA_HOME/jre/lib/security/cacerts
    
    $JAVA_HOME/bin/keytool -storepasswd -keystore $JAVA_HOME/jre/lib/security/jssecacerts
    
  9. 將根CA證書匯入JDK信任庫

    sudo $JAVA_HOME/bin/keytool -importcert -alias rootca -keystore $JAVA_HOME/jre/lib/security/jssecacerts -file /opt/cloudera/security/pki/rootca.pem
    

    示例:

    [root@node00 security]# sudo $JAVA_HOME/bin/keytool -importcert -alias rootca -keystore $JAVA_HOME/jre/lib/security/jssecacerts -file /opt/cloudera/security/pki/rootca.pem
    Enter keystore password:  
    Owner: CN=node00, OU=data, O=Hinabian, L=ShenZhen, ST=GuangDong, C=CN
    Issuer: CN=node00, OU=data, O=Hinabian, L=ShenZhen, ST=GuangDong, C=CN
    Serial number: 9471ac2f95693bf8
    Valid from: Wed Oct 24 14:37:41 CST 2018 until: Thu Oct 24 14:37:41 CST 2019
    Certificate fingerprints:
    	 MD5:  82:93:CE:E0:29:BC:58:13:D8:54:2D:50:94:CB:FD:D6
    	 SHA1: 1B:74:63:E1:5D:21:38:01:E0:7B:4F:EE:18:7B:0D:1D:5B:85:B7:D2
    	 SHA256: 04:D8:1C:BA:4F:D8:9C:ED:E7:A5:9A:49:6A:B8:D6:9E:D9:76:71:4A:AB:9B:30:06:41:CD:A7:0E:74:4F:1F:1E
    Signature algorithm name: SHA256withRSA
    Subject Public Key Algorithm: 2048-bit RSA key
    Version: 1
    Trust this certificate? [no]:  yes
    Certificate was added to keystore
    [root@node00 security]#
    
  10. 將中間CA證書附加到簽名的主機證書,然後將其匯入金鑰庫。
    注意:使用追加運算子(>>)而不是覆蓋操作符(>)。

    sudo cat /opt/cloudera/security/pki/intca.pem >> /opt/cloudera/security/pki/$(hostname -f).pem
    
    sudo $JAVA_HOME/bin/keytool -importcert -alias $(hostname -f) -file /opt/cloudera/security/pki/$(hostname -f).pem -keystore /opt/cloudera/security/pki/$(hostname -f).jks
    
  11. 為證書和金鑰庫檔案建立符號連結

    sudo ln -s /opt/cloudera/security/pki/$(hostname -f).pem /opt/cloudera/security/pki/agent.pem
    

    這樣可以使所有agent節點使用相同的 /etc/cloudera-scm-agent/config.ini 配置,而不需要維護每個agent節點。

  12. 在Cloudera Manager Server節點上,建立金鑰庫檔案符號連結

    sudo ln -s /opt/cloudera/security/pki/$(hostname -f).jks /opt/cloudera/security/pki/server.jks 
    

二、 Cloudera Manager Admin Console配置TLS

  1. Cloudera Manager Admin Console啟用HTTPS

    1. 登入Cloudera Manager Admin Console, 選擇管理 > 設定 > 安全。
      在這裡插入圖片描述
    2. 配置以下TLS設定:
      在這裡插入圖片描述
    3. 輸入更改原因,然後單擊“ 儲存更改”以儲存設定。
      在這裡插入圖片描述
  2. Cloudera Management Services指定SSL Truststore屬性
    在Cloudera Manager Server管理介面啟用TLS時,必須在Cloudera Management Services配置中設定Java信任庫位置和密碼。否則,Host Monitor和Service Monitor等角色無法連線到Cloudera Manager Server,導致無法啟動。

    配置信任庫的路徑$JAVA_HOME/jre/lib/security/jssecacerts和密碼changeit。確保叢集中所有節點(包括Cloudera Management Service節點)上建立了此檔案。

    開啟Cloudera Manager管理控制檯並轉到Cloudera Management Service服務,單擊“ 配置”選項卡。選擇Scope > Cloudera Management Service(服務範圍) >類別 > 安全性
    根據叢集配置編輯以下TLS / SSL屬性後,儲存提交。
    在這裡插入圖片描述

  3. 重新啟動Cloudera Manager和Cloudera Management Service服務
    重啟Cloudera Manager

    $ /opt/cm-5.11.0/etc/init.d/cloudera-scm-server restart
    

    重啟Cloudera Management Service服務

    Cloudera Management Service > 操作 > 重新啟動

三、為Cloudera Manager Agents配置TLS

  1. 在Cloudera Manager中為代理啟用TLS加密,配置Cloudera Manager Agents的TLS屬性

    登入Cloudera Manager Admin Console > 管理 > 設定 > 安全性
    勾選“ 為代理使用 TLS 加密”選項。
    在這裡插入圖片描述
    單擊“ 儲存更改”以提交更改。

  2. 在Cloudera Manager Agent節點上啟用TLS
    要在Cloudera Manager Agent和Cloudera Manager之間啟用TLS,必須在TLS屬性中指定TLS屬性的值。 修改所有agent節點上的配置檔案/opt/cm-5.11.0/etc/cloudera-scm-agent/config.ini 。

    [Security]
    # Use TLS and certificate validation when connecting to the CM server.
    use_tls=1           (預設為0)
    
  3. 重新啟動Cloudera Manager Server和Cloudera Manager Agent

    $ /opt/cm-5.11.0/etc/init.d/cloudera-scm-server restart
    $ /opt/cm-5.11.0/etc/init.d/cloudera-scm-agent restart 		(每個agent節點均要執行)
    
  4. 驗證Cloudera Manager Server 和Cloudera Manager Agent是否正常通訊
    如果在重新啟動代理後在Last Heartbeat列中看到成功檢測到心跳,則TLS加密正常。
    登入Cloudera Manager Admin Console > 主機 > 所有主機 > 上一檢測訊號
    在這裡插入圖片描述

四、在Cloudera Manager Agent上啟用伺服器證書驗證

如果已完成上述步驟,則Cloudera Manager Server與Cloudera Manager Agent之間的通訊將被加密,但並不驗證證書的真實性。為了保持完全安全,Agent 必須配置 驗證Cloudera Manager Server證書。如果使用由內部證書頒發機構(CA)簽名的伺服器證書,則Agent必須配置信任該CA。

  1. 修改配置檔案
    在每個Agent節點(包括Cloudera Manager Server主機)上,修改配置檔案/opt/cm-5.11.0/etc/cloudera-scm-agent/config.ini ,設定下面屬性:
    verify_cert_file=/opt/cloudera/security/pki/rootca.pem
    
  2. 重新啟動Cloudera Manager Agent
    $ /opt/cm-5.11.0/etc/init.d/cloudera-scm-server restart
    $ /opt/cm-5.11.0/etc/init.d/cloudera-scm-agent restart 		(每個agent節點均要執行)
    
  3. 重新啟動Cloudera Management Service
    Cloudera Management Service > 操作 > 重新啟動。
  4. 驗證Cloudera Manager Server 和Cloudera Manager Agent是否正常通訊
    登入Cloudera Manager Admin Console > 主機 > 所有主機 > 上一檢測訊號
    如果在重新啟動代理後在Last Heartbeat列中看到成功檢測到心跳,則TLS加密驗證正常。
    如果沒有,請檢查Agent錯誤日誌(/var/log/cloudera-scm-agent/cloudera-scm-agent.log)。

五、配置代理證書認證

如果沒有證書身份驗證,惡意使用者可以通過安裝Cloudera Manager Agent軟體並將其配置為與Cloudera Manager Server進行通訊,將該節點新增到Cloudera Manager。為了防止這種情況,Cloudera Manager必須配置信任Agent證書。

要點:在每個Agent節點上執行此過程,包括也具有Agent的Cloudera Manager Server節點

  1. 將私鑰匯出到檔案
    在每個Cloudera Manager Agent節點上,使用keytool 將私鑰和證書匯出到PKCS12 檔案中,然後可以使用。分成單獨的金鑰和證書檔案 OpenSSL的 命令:

    1. 匯出私鑰和證書
      $ sudo $JAVA_HOME/bin/keytool -importkeystore -srckeystore /opt/cloudera/security/pki/$(hostname -f).jks -destkeystore /opt/cloudera/security/pki/$(hostname -f)-key.p12 -deststoretype PKCS12 -srcalias $(hostname -f)
      
    2. 使用 OpenSSL的 命令將私鑰匯出到自己的檔案中
      sudo openssl pkcs12 -in /opt/cloudera/security/pki/$(hostname -f)-key.p12 -nocerts -out /opt/cloudera/security/pki/$(hostname -f).key
      
    3. 為.key檔案建立符號連結
      sudo ln -s /opt/cloudera/security/pki/$(hostname -f).key /opt/cloudera/security/pki/agent.key
      

    所有Agent節點使用相同的配置檔案( /etc/cloudera-scm-agent/config.ini ),而不需要為每個節點單獨維護配置檔案。

  2. 建立密碼檔案
    Cloudera Manager Agent 從文字檔案獲取密碼,而不是從命令列引數或環境變數獲取密碼。改變密碼檔案的檔案許可權來保護密碼。
    在每個Cloudera Manager Agent節點上執行以下命令,或在一個節點上執行它們然後將檔案複製到其他主機:

    1. 使用文字編輯器建立一個名為/etc/cloudera-scm-agent/agentkey.pw的檔案,包含密碼。

    2. 將檔案的所有權更改為 root:

      sudo chown root:root /etc/cloudera-scm-agent/agentkey.pw
      
    3. 更改檔案的許可權:

      sudo chmod 440 /etc/cloudera-scm-agent/agentkey.pw
      
  3. 配置代理以使用私鑰和證書
    在Cloudera Manager Agent上,編輯 配置檔案(/etc/cloudera-scm-agent/config.ini )。
    取消註釋並編輯以下屬性:

    屬性 示例值 描述
    lient_key_file /opt/cloudera/security/pki/agent.key 私鑰檔案的路徑。
    lient_keypw_file /etc/cloudera-scm-agent/agentkey.pw 私鑰密碼檔案的路徑。
    lient_cert_file /opt/cloudera/security/pki/agent.pem 客戶端證書檔案的路徑。

    將檔案複製到所有其他節點。如果您修改了 在 config.ini檔案的屬性listening_hostname 或listening_ip地址,必須在每臺主機上單獨編輯檔案。

  4. 啟用代理證書身份驗證

    登入Cloudera Manager Admin Console > 管理 > 設定 > 安全性
    配置以下TLS設定:

    設定 描述
    使用代理的TLS身份驗證到伺服器 選擇此選項可啟用代理到伺服器的TLS身份驗證。
    Cloudera Manager TLS / SSL證書信任儲存檔案 指定的完整檔案系統路徑 jssecacerts檔案位 於Cloudera Manager Server主機上。對於此示例,請將值設定為:<JAVA_HOME>/jre/lib /security/jssecacerts將<JAVA_HOME> 替換為Oracle JDK的安裝路徑。
    Cloudera Manager TLS / SSL證書信任儲存密碼 jssecacerts 信任庫的密碼 。

    單擊“ 儲存更改”以提交更改。

  5. 重新啟動Cloudera Manager Server和Cloudera Manager Agent

    $ /opt/cm-5.11.0/etc/init.d/cloudera-scm-server restart
    $ /opt/cm-5.11.0/etc/init.d/cloudera-scm-agent restart 		(每個agent節點均要執行)
    
  6. 驗證Cloudera Manager Server和代理是否正在通訊

    登入Cloudera Manager Admin Console > 主機 > 所有主機 > 上一檢測訊號
    如果在重新啟動代理後在Last Heartbeat列中看到成功檢測到心跳,則TLS加密驗證正常。
    如果沒有,請檢查Agent錯誤日誌(/var/log/cloudera-scm-agent/cloudera-scm-agent.log)。

    如果遇到以下錯誤:

    WrongHost: Peer certificate commonName does not match host, expected 192.0.2.155, got cdh-1.example.com
    [02/May/2018 15:04:15 +0000] 4655 MainThread agent        ERROR    Heartbeating to 192.0.2.155:7182 failed
    
    1. 請檢查DNS和 /etc/hosts檔案配置是否正確
    2. 配置檔案/etc/cloudera-scm-agent/config.ini 的SERVER_HOST引數使用Cloudera Manager Server主機名,而不是IP地址。