版本:為了避免第三方非法訪問我們的重要資料,我們可以給hbase配置加密演算法,目前hbase只支援使用aes加密演算法,用於保護靜態的hfile和wal資料。hdp:3.0.1.0
hbase:2.0.0
hbase配置的aes加密是一種端到端的加密模式,其中的加/解密過程對於客戶端來說是完全透明的。資料在客戶端讀操作的時候被解密,當資料被客戶端寫的時候被加密。這個功能作用就是保證處於加密空間內的資料不被非法查詢,只有經過認證的客戶端才能檢視解密內容。
這裡只是對aes演算法的乙個簡單說明。
aes是乙個對稱加密演算法,如下圖所示:
下面簡單介紹下各個部分的作用與意義:
金鑰k用來加密明文的密碼,在對稱加密演算法中,加密與解密的金鑰是相同的。金鑰為接收方與傳送方協商產生,但不可以直接在網路上傳輸,否則會導致金鑰洩漏,通常是通過非對稱加密演算法加密金鑰,然後再通過網路傳輸給對方,實際中,一般是通過rsa加密aes的金鑰,傳輸到接收方,接收方解密得到aes金鑰,然後傳送方和接收方用aes金鑰來通訊。
金鑰是絕對不可以洩漏的,否則會被攻擊者還原密文,竊取機密資料。
aes加密函式設aes加密函式為e,則 c = e(k, p),其中p為明文,k為金鑰,c為密文。也就是說,把明文p和金鑰k作為加密函式的引數輸入,則加密函式e會輸出密文c。
aes解密函式設aes解密函式為d,則 p = d(k, c),其中c為密文,k為金鑰,p為明文。也就是說,把密文c和金鑰k作為解密函式的引數輸入,則解密函式會輸出明文p。
接下來主要介紹需要在hbase-site.xml檔案內增加哪些配置。最後通過ambari頁面將自定義配置加到hbase-site.xml中。分為以下幾步:
使用keytool實用程式為aes加密建立適當長度的金鑰。
cd /usr/hdp/3.0.1.0-187/hbase/conf/# 生成hbase.jkskeytool -keystore hbase.jks -storetype jceks -storepass admin123 -genseckey -keyalg aes -keysize 128 -alias hbase
設定hbase.jks許可權在金鑰檔案上設定適當的許可權,並將其分發給所有hbase伺服器。 上乙個命令在/usr/hdp/3.0.1.0-187/hbase/conf/目錄下建立了乙個名為hbase.jks的檔案。設定此檔案的許可權和所有權,以便只有hbase服務帳戶使用者可以讀取該檔案,並將金鑰安全地分發給所有hbase伺服器。
# 在每台機器上執行以下命令:cd /usr/hdp/3.0.1.0-187/hbase/confchmod 600 hbase.jkschown hbase:hadoop hbase.jks# 通過scp命令將檔案傳輸到各節點的指定位置scp -r hbase.jks root@***:/usr/hdp/3.0.1.0-187/hbase/conf# 拷貝完成後,也需要設定檔案的相關許可權,600。
配置hbase daemons在集群的hbase-site.xml中設定以下屬性,配置hbase守護程式以使用由keystore檔案支援的金鑰提供程式或檢索集群主金鑰。在下面的示例中,admin123為密碼,可自定義。
# 自定義hbase-site:hbase.crypto.keyprovider=org.apache.hadoop.hbase.io.crypto.keystorekeyproviderhbase.crypto.keyprovider.parameters=jceks:///usr/hdp/3.0.1.0-187/hbase/conf/hbase.jks?password=admin123
預設情況下,hbase服務帳戶名稱將用於解析群集主金鑰。但是,您可以使用任意別名(在keytool命令中)儲存它。在這種情況下,請將以下屬性設定為您使用的別名。
# 自定義hbase-site:hbase.crypto.master.key.name=hbase
您還需要確保您的hfile使用hfile v3,以便使用透明加密。這是hbase 1.0以後的預設配置。對於以前的版本,請在hbase-site.xml檔案中設定以下屬性。
# 自定義hbase-site:hfile.format.version=3
配置configure wal encryption通過設定以下屬性,在每個regionserver的hbase-site.xml中配置wal加密。您也可以將這些包含在hmaster的hbase-site.xml中,但是hmaster沒有wal並且不會使用它們。
# 自定義hbase-site:hbase.regionserver.hlog.reader.impl=org.apache.hadoop.hbase.regionserver.wal.secureprotobuflogreaderhbase.regionserver.hlog.writer.impl=org.apache.hadoop.hbase.regionserver.wal.secureprotobuflogwriterhbase.regionserver.wal.encryption=true
配置hbase-site.xml檔案的許可權。由於金鑰庫密碼儲存在hbase-site.xml中,因此需要確保只有hbase使用者可以使用檔案所有權和許可權讀取hbase-site.xml檔案。
chmod -r 600 hbase-site.xml
將上述配置新增到自定義hbase-site中,重啟hbase服務。建立加密型別為aes的表格式:create 『hbase目前只支援aes加密,它是一種端到端的加密模式,其中的加/解密過程對於客戶端來說是完全透明的。資料在客戶端讀操作的時候被解密,當資料被客戶端寫的時候被加密。這個功能作用就是保證處於加密空間內的資料不被非法查詢,只有經過認證的客戶端才能檢視解密內容。create 'hbase_1102', , put'hbase_1102', '001','cf1:name','tom'put'hbase_1102', '001','cf1:gender','man'put'hbase_1102', '001','cf2:chinese','90'put'hbase_1102', '001','cf2:math','91'put 'hbase_1102', '001','cf2:math','91', 1557566858555# 刪除hbase的一條資料delete 'hbase_1102', '001', 'cf2:math'# 根據時間戳來獲取資料get 'hbase_1102','001',
關於hbase自定義擴充套件加密方式,比如支援sms4加密/解密,正在研究。等實現了的話,再好好跟大家分享。
--end--
aes子金鑰生成c語言 AES加密的C語言實現
aes加密的c語言實現,在ubuntu13.10下測試成功。輸入1.txt加密內容,key金鑰 輸出2.txt密文,3.txt解密後的明文 備註 網上下的,但是這明顯不是乙個ase加密演算法,而是乙個des加密演算法!後來我又發現,這似乎是乙個ase加密的s盒簡單實現。終歸所學不足。include ...
aes子金鑰生成c語言 AES加密的C語言實現
aes加密的c語言實現,在ubuntu13.10下測試成功。輸入1.txt加密內容,key金鑰 輸出2.txt密文,3.txt解密後的明文 備註 網上下的,但是這明顯不是乙個ase加密演算法,而是乙個des加密演算法!後來我又發現,這似乎是乙個ase加密的s盒簡單實現。終歸所學不足。include ...
AES的C 實現 128位金鑰
寫了乙個aes的c 實現,僅支援128位金鑰,寫得匆忙,不夠規範,僅供參考。aes.h ifndef aes h define aes h include include using namespace std class aes void aes encryptionprocess finalro...