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中都有广泛的应用,根据具体需求选择合适的加密方式至关重要。同时,为了确保加密的安全性,还需要注意密钥的管理和保护,避免密钥泄露带来的安全风险。