首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你的nginx登录认证安全吗?

你的nginx登录认证安全吗?

作者头像
李俊鹏
发布2020-06-15 15:08:56
2.2K0
发布2020-06-15 15:08:56
举报
文章被收录于专栏:运维研习社运维研习社

auth_basic作为一个认证模块,在apache和nginx中都很常用,在许多没有自带认证的系统中,使用nginx的auth_basic做一个简单的认证,是常见的操作

如图,开启了auth_basic认证之后,在访问的时候,会提示输入用户名密码进行认证

通常和auth_basic配合使用的一个工具是htpasswd,该工具来源于httpd-tools包,主要用于生成用户及其密码加密文件

今天要说的问题就是htpasswd在生成密码时的一个问题

用htpasswd生成一个用户名密码对,存储在文件中,使用auth_basic调用认证,为了安全,特意使用了较长的密码来加密

然后进行认证的时候,不小心输错了最后一位,然而发现认证通过,进入了web页面

经过一番探索,就有了这篇文章

先来看两张图片,上面这张是httpd-tools 2.2版本的htpasswd,下面图片是httpd-tools 2.4版本的htpasswd

从上面两张图可以看到htpasswd总共有4种加密算法,分别是MD5、bcrypt、CRYPT、SHA,在httpd-tools 2.2的版本中,默认使用的是CRYPT加密算法来进行密码加密的,而httpd-tools 2.4的版本中,默认是使用MD5来进行密码加密的

我上面的问题就是出在低版本中,使用CRYPT默认加密的情况下发生的

crypt是一个加密算法函数,它是基于DES算法,将字符串加密,函数定义如下:

char *crypt(const char *key, const char *salt);

crypt在加密时,将key所指的字符串仅取前8个字符进行加密,超过8位的没有任何意义,这也就是为什么我上面最后一位输错了仍然可以进入web页面的原因,因为指认前8位,后面是什么无所谓,都可以认证通过

crypt加密后的密文为13位,前面两个就是上面函数定义中的salt代表的字符串

然后有人说明明SHA比MD5加密要安全性高,为什么新版本中用MD5作为默认加密算法?

在httpd-tools 2.4的图中,最后一句话“The SHA algorithm does not use a salt and is less secure than the MD5 algorithm”翻译一下就是,没有加salt的SHA算法,并没有MD5安全

salt在密码学中,叫做盐,是一个随机生成的字符串,在不加盐的哈希中,有一种破解方法就是彩虹表碰撞,原始密码通过加盐之后再进行散列,可以有效避免彩虹表攻击的暴力破解

安全的处理方法是,更新httpd-tools到2.4版本,然后重新生成用户密码对,或在htpasswd生成密钥时,通过参数-m选择md5加密方式生成新的用户密码对

赶快检查一下你的加密方式吧!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档