Redis 这类开源的 Key-Value 数据库被越来越多的公司所采用,于是乎,Redis 已经是成了面试必问的技术了。
昨天,我在外买菜期间,有网友私信我,说上周面试阿里,面了 Redis 的知识,命令之类的一个也没问,只问了 Redis 的密码配置和 Jedis 对配置文件的加解密处理。他当场懵圈了,面试之前看了很多 Redis 的知识,一个也没问到。
今天,我们就一起来说说,Redis 的密码认证配置和 Jedis 的对配置的加密密码的处理!
公司越大,安全性要求越高。为了不让你的数据裸奔,所以,安全认证很有必要。Redis 的密码配置有两种方案。
1、直接在 redis.conf 中配置。
比如,我的 redis.conf 在 /usr/local/etc/redis.conf 位置,那么我就编辑这个配置文件。
找到 #requirepass foobared 这一行,去掉前面的 # 号。设置密码为:xttblog。
requirepass xttblog
保存文件,然后重启 Redis。
brew services restart redis
除了,这一种配置密码的方法,还有一种通过命令的形式修改密码。
2、通过 config set requirepass 命令,配置修改密码。
redis-cli -h 127.0.0.1 -p 6379 -a xttblog
连接上了之后,配置或修改新密码。
config set requirepass xttblog_new_password
然后,无需重启,之后的新链接都必须通过新密码才能才能完成认证。
但是这种方式有一个问题,那就是,当服务重启之后,新密码就失效了,认证密码又被重置成了配置文件中的密码。
需要注意的是,一旦你配置了密码。那么你连接的 Jedis,集群中的 slave 都需要配置密码,否则就无法正常使用了。
配置密码后,Jedis 的使用就非常简单了。只需要在 yml 中,配置密码认证即可。
spring:
redis:
host: 127.0.0.1
port: 6379
password: xttblog_new_password
database: 8
但是,只这样还不行,还需要把配置文件中的内容给加密了。然后在 JedisPool 中,对要使用的密码进行解密。
@Bean
public JedisPool pool(JedisPoolConfig config, JedisProperties jedisProperties) {
return new JedisPool(config, jedisProperties.getHost(), jedisProperties.getPort(), 5000,
decryptPwd(jedisProperties.getPassword()), jedisProperties.getDatabase());
}
private String decryptPwd(String pwd){
//省略解密代码
}
除此之外,大家都知道阿里面试的套路。光会这些还不行,比如,对方继续套路你,原生 Redis 通过 config get 命令可能获取到服务端敏感信息。针对这种情况,如何解决?
如何检验/校验密码设置的复杂度?如何防止 Redis 认证的暴力破解?如何限制访问的 IP 范围?登录认证时,能否记录日志?怎么记录?配置文件中的明文密码如何加密处理?
以上,希望大家对有所帮助。知道自己的不足,赶紧充电吧!
: » 阿里的 Redis 连环炮面试题,看的资料一个也没用上
原创文章,作者:wdmbts,如若转载,请注明出处:https://blog.ytso.com/252131.html