A. 【kerberos】Kerberos安裝使用詳解及遇到的問題
一、Kerberos協議:Kerberos協議主要用於計算機網路的身份鑒別(Authentication), 其特點是用戶只需輸入一次身份驗證信息就可以憑藉此驗證獲得的票據(ticket-granting ticket)訪問多個服務,即SSO(Single Sign On)。由於在每個Client和Service之間建立了共享密鑰,使得該協議具有相當的安全性。
二、環境信息:信息版本操作系統centos6.9伺服器類型虛擬機CDH5.13節點數量5節點信息: | ?ip| 主機名 ?|角色 | |--|--| --| | 10.12.24.209 |dx-dev-test1029 ?| client| | 10.12.25.208 |dx-dev-test1026 ?| client| | 10.12.25.209 |dx-dev-test1030 ?| client| | 10.12.26.208 |dx-dev-test1027 ?| client| | 10.12.27.208 |dx-dev-test1028 ?| server|
三、安裝kerberos使用yum安裝kerberos
1. server服務端安裝:yum install krb5-server2. client客戶端安裝註:server節點也是client節點,也是需要安裝
yum install krb5-workstation krb5-libs krb5-auth-dialog 3. 服務端節點配置(1) 修改/etc/krb5.conf/etc/krb5.conf: 包含Kerberos的配置信息。例如,KDC的位置,Kerberos的admin的realms 等。需要所有使用的Kerberos的機器上的配置文件都同步。這里僅列舉需要的基本配置。 注意修改:紅色的標記
文件內容如下:
[libdefaults]default_realm = RONG360.COMdns_lookup_kdc = falsedns_lookup_realm = falseticket_lifetime = 86400renew_lifetime = 604800forwardable = truedefault_tgs_enctypes = aes128-cts aes256-cts-hmac-sha1-96 des3-hmac-sha1 arcfour-hmacdefault_tkt_enctypes = aes128-cts aes256-cts-hmac-sha1-96 des3-hmac-sha1 arcfour-hmacpermitted_enctypes = aes128-cts aes256-cts-hmac-sha1-96 des3-hmac-sha1 arcfour-hmacudp_preference_limit = 1kdc_timeout = 60000[realms]RONG360.COM = {kdc = dx-dev-test1028admin_server = dx-dev-test1028}[domain_realm]~說明:
[logging]:表示server端的日誌的列印位置
[libdefaults]:每種連接的默認配置,需要注意以下幾個關鍵的小配置
default_realm = HADOOP.COM 默認的realm,必須跟要配置的realm的名稱一致。
udp_preference_limit = 1 禁止使用udp可以防止一個Hadoop中的錯誤
oticket_lifetime表明憑證生效的時限,一般為24小時。
orenew_lifetime:表明憑證最長可以被延期的時限,一般為一個禮拜。當憑證過期之後,對安全認證的服務的後續訪問則會失敗。
[realms]:列舉使用的realm。
kdc:代表要kdc的位置。格式是 機器:埠
admin_server:代表admin的位置。格式是機器:埠
default_domain:代表默認的域名
[appdefaults]:可以設定一些針對特定應用的配置,覆蓋默認配置。
udp_preference_limit = 1 kdc原生支持tcp/udp協議,客戶端訪問kdc服務時,默認先使用udp協議發起請求,如果數據包過大或者請求失敗,然後再換用tcp協議請求。網路條件不好,如果使用udp容易出現丟包現象。
(2) 修改/var/kerberos/krb5kdc/kdc.conf默認放在/var/kerberos/krb5kdc/kdc.conf。或者通過覆蓋KRB5_KDC_PROFILE環境變數修改配置文件位置。 文件內容如下:文件內容如下:
[kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88[realms] RONG360.COM = {#master_key_type = aes256-ctsacl_file = /var/kerberos/krb5kdc/kadm5.acldict_file = /usr/share/dict/wordsadmin_keytab = /var/kerberos/krb5kdc/kadm5.keytabsupported_enctypes = aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal}說明:
RONG360.COM:是設定的realms。名字隨意。Kerberos可以支持多個realms,會增加復雜度。本文不探討。大小寫敏感,一般為了識別使用全部大寫。這個realms跟機器的host沒有大關系。
max_renewable_life = 7d 涉及到是否能進行ticket的renwe必須配置。
master_key_type:和supported_enctypes默認使用aes256-cts。由於,java使用aes256-cts驗證方式需要安裝額外的jar包,更多參考2.2.9關於AES-256加密:。推薦不使用。
acl_file:標注了admin的用戶許可權。文件格式是
Kerberos_principal permissions [target_principal] ?[restrictions]支持通配符等。
admin_keytab:KDC進行校驗的keytab。後文會提及如何創建。
supported_enctypes:支持的校驗方式。注意把aes256-cts去掉。
(3) 修改/var/kerberos/krb5kdc/kadm5.acl編輯 Kerberos 訪問控制列表文件 (kadm5.acl) 文件應包含允許管理 KDC 的所有主體名稱。文件內容如下:
*/[email protected] *註:將上面修改的文件,進行全節點分發。
4.創建/初始化Kerberos database初始化並啟動:完成上面三個配置文件後,就可以進行初始化並啟動了。
創建命令:
kdb5_util create -s -r RONG360.COM其中,[-s]表示生成stash file,並在其中存儲master server key(krb5kdc);還可以用[-r]來指定一個realm name —— 當krb5.conf中定義了多個realm時才是必要的。
保存路徑為/var/kerberos/krb5kdc 如果需要重建資料庫,將該目錄下的principal相關的文件刪除即可在此過程中,我們會輸入database的管理密碼。這里設置的密碼一定要記住,如果忘記了,就無法管理Kerberos server。
當Kerberos database創建好後,可以看到目錄/var/kerberos/krb5kdc 下生成了幾個文件:
kadm5.acl kdc.conf principal principal.kadm5 principal.kadm5.lock principal.ok5. 重啟服務重啟服務
service krb5kdc start 或 systemctl startkrb5kdcservice kadmin start 或 systemctl startkadmin6. 設置開機啟動設置開機自動啟動:
chkconfig krb5kdc on 或 systemctl enable krb5kdcchkconfig kadmin on 或 systemctl enable kadmin現在KDC已經在工作了。這兩個daemons將會在後台運行,可以查看它們的日誌文件(/var/log/krb5kdc.log 和 /var/log/kadmind.log)。
可以通過命令kinit來檢查這兩個daemons是否正常工作。
7. 添加database administrator我們需要為Kerberos database添加administrative principals (即能夠管理database的principals) —— 至少要添加1個principal來使得Kerberos的管理進程kadmind能夠在網路上與程序kadmin進行通訊。
在maste KDC上執行:
/usr/sbin/kadmin.local -q "addprinc admin/admin"通過上面的命令為其設置密碼
yum install krb5-workstation krb5-libs krb5-auth-dialog0可以直接運行在master KDC上,而不需要首先通過Kerberos的認證,實際上它只需要對本地文件的讀寫許可權。
8. 客戶端階段配置將之前修改的/etc/krb5.conf拷貝到從節點。
四、kerberos日常操作1. 管理員操作登陸登錄到管理員賬戶: 如果在本機上,可以通過yum install krb5-workstation krb5-libs krb5-auth-dialog0直接登錄。其它機器的,先使用kinit進行驗證。
增刪改查賬戶在管理員的狀態下使用addprinc,delprinc,modprinc,listprincs命令。使用?可以列出所有的命令。
yum install krb5-workstation krb5-libs krb5-auth-dialog0 -q "addprinc -pw 111111 test"yum install krb5-workstation krb5-libs krb5-auth-dialog0: delprinc testyum install krb5-workstation krb5-libs krb5-auth-dialog0: listprincs生成keytab:使用xst命令或者ktadd命令yum install krb5-workstation krb5-libs krb5-auth-dialog22. 用戶操作查看當前的認證用戶認證用戶yum install krb5-workstation krb5-libs krb5-auth-dialog3刪除當前的認證的緩存yum install krb5-workstation krb5-libs krb5-auth-dialog4五、常見問題1. 查看ticket是否是renewable通過klist命令來查看
如果Valid starting的值與renew until的值相同,則表示該principal的ticket 不是 renwable。
2. ticket無法更新如果過了Expires,可以通過命令kinit –R來更新ticket 但如果ticket無法更新
yum install krb5-workstation krb5-libs krb5-auth-dialog5這是因為krbtgt/HADOOP.COM@ HADOOP.COM的[renewlife]被設置成了0,這一點可以通過[yum install krb5-workstation krb5-libs krb5-auth-dialog0 => getprinc krbtgt/ HADOOP.COM @ HADOOP.COM]看出來。
將krbtgt/[email protected]的[renewlife]修改為7days即可。
yum install krb5-workstation krb5-libs krb5-auth-dialog0: modprinc -maxrenewlife 1week krbtgt/[email protected]. CDH安裝Kerberos後,重啟集群報錯yum install krb5-workstation krb5-libs krb5-auth-dialog7原因: 因為系統採用的是Centos7.6,對於使用Centos5.6及以上西戎,默認採用 AES-256 來加密;這就需要CDH集群所有的節點都安裝 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File 下載鏈接:
yum install krb5-workstation krb5-libs krb5-auth-dialog8解決辦法: 1.下載的文件是個zip包,解壓 2.將解壓後的 UnlimitedJCEPolicyJDK8 文件下的兩個jar包 復制到 $JAVA_HOME/jre/lib/security/
我的JAVA_HOME=/opt/mole/jdk1.8.0_144yum install krb5-workstation krb5-libs krb5-auth-dialog93.如果你的JAVA_HOME不是在/usr/java下,那麼還需要進行一步操作 mkdir /usr/java
創建軟鏈接指向自己的JAVA_HOME[libdefaults]default_realm = RONG360.COMdns_lookup_kdc = falsedns_lookup_realm = falseticket_lifetime = 86400renew_lifetime = 604800forwardable = truedefault_tgs_enctypes = aes128-cts aes256-cts-hmac-sha1-96 des3-hmac-sha1 arcfour-hmacdefault_tkt_enctypes = aes128-cts aes256-cts-hmac-sha1-96 des3-hmac-sha1 arcfour-hmacpermitted_enctypes = aes128-cts aes256-cts-hmac-sha1-96 des3-hmac-sha1 arcfour-hmacudp_preference_limit = 1kdc_timeout = 60000[realms]RONG360.COM = {kdc = dx-dev-test1028admin_server = dx-dev-test1028}[domain_realm]~0目前總結到這!
原文:https://juejin.cn/post/7102745597911760903B. java.util.zip.ZipException這個問題怎麼解決
引入的jar包不對,或者你的壓縮文件不標准。
一般就會報這個錯誤。
C. java實現ase加密解密
這個演算法java SDK自帶的額 參考代碼如下:
/**解密
*@paramcontent待解密內容
*@parampassword解密密鑰
*@return
*/
publicstaticbyte[]decrypt(byte[]content,Stringpassword){
try{
KeyGeneratorkgen=KeyGenerator.getInstance("AES");
kgen.init(128,newSecureRandom(password.getBytes()));
SecretKeysecretKey=kgen.generateKey();
byte[]enCodeFormat=secretKey.getEncoded();
SecretKeySpeckey=newSecretKeySpec(enCodeFormat,"AES");
Ciphercipher=Cipher.getInstance("AES");//創建密碼器
cipher.init(Cipher.DECRYPT_MODE,key);//初始化
byte[]result=cipher.doFinal(content);
returnresult;//加密
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}catch(NoSuchPaddingExceptione){
e.printStackTrace();
}catch(InvalidKeyExceptione){
e.printStackTrace();
}catch(IllegalBlockSizeExceptione){
e.printStackTrace();
}catch(BadPaddingExceptione){
e.printStackTrace();
}
returnnull;
}
/**
*加密
*
*@paramcontent需要加密的內容
*@parampassword加密密碼
*@return
*/
publicstaticbyte[]encrypt(Stringcontent,Stringpassword){
try{
KeyGeneratorkgen=KeyGenerator.getInstance("AES");
kgen.init(128,newSecureRandom(password.getBytes()));
SecretKeysecretKey=kgen.generateKey();
byte[]enCodeFormat=secretKey.getEncoded();
SecretKeySpeckey=newSecretKeySpec(enCodeFormat,"AES");
Ciphercipher=Cipher.getInstance("AES");//創建密碼器
byte[]byteContent=content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE,key);//初始化
byte[]result=cipher.doFinal(byteContent);
returnresult;//加密
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}catch(NoSuchPaddingExceptione){
e.printStackTrace();
}catch(InvalidKeyExceptione){
e.printStackTrace();
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}catch(IllegalBlockSizeExceptione){
e.printStackTrace();
}catch(BadPaddingExceptione){
e.printStackTrace();
}
returnnull;
}
http://blog.csdn.net/hbcui1984/article/details/5201247
圖像界面的話就不說了
D. java 加密方式有哪些
Java加密方式有多種,包括對稱加密、非對稱加密、散列加密等。
1. 對稱加密:
對稱加密是指加密和解密使用相同密鑰的加密方式。在Java中,常見的對稱加密演算法有AES、DES、3DES等。其中,AES演算法是DES的替代品,具有更高的安全性。這些演算法提供了不同級別的加密強度,適用於保護敏感信息。
2. 非對稱加密:
非對稱加密使用一對密鑰,一個用於加密,另一個用於解密。在Java中,常見的非對稱加密演算法有RSA、DSA、ECC等。RSA演算法是最常用的非對稱加密演算法之一,它利用公鑰進行加密,私鑰進行解密,適用於安全通信和數字簽名。
3. 散列加密(哈希加密):
散列加密是一種將任意長度的輸入轉換為固定長度輸出的加密方式。在Java中,常見的散列加密演算法有MD5、SHA-1、SHA-256等。這些演算法主要用於生成數據的唯一標識符(哈希值),適用於密碼存儲、文件校驗等場景。需要注意的是,雖然MD5在某些情況下存在安全隱患,但SHA系列演算法提供了更高的安全性。
以上三種加密方式在Java中都有廣泛的應用,根據具體需求選擇合適的加密方式至關重要。同時,為了確保加密的安全性,還需要注意密鑰的管理和保護,避免密鑰泄露帶來的安全風險。