深入了解nginx基本登录认证及相关配置步骤解析

我想请说下,深入了解nginx基本登录认证及相关配置步骤解析
最新回答
国民傲娇女

2024-11-24 08:17:38

http基本验证的作用

http基本身份验证会从浏览器弹出登录窗口,

简单明了,容易理解,

对于面向终端用户的前台来说,不够友好,

但对于内部员工操作的后台还是很有用,通常作为一层安全措施应用。

这个登录认证安全吗?

auth_basic作为一个认证模块,在apache和nginx中都很常用,在许多没有自带认证的系统中,使用nginx的auth_basic做一个简单的认证,是常见的操作,开启了auth_basic认证之后,在访问的时候,会提示输入用户名密码进行认证。

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

可能存在的问题

但是在htpasswd在生成密码时有一个问题

可以看到htpasswd总共有4种加密算法,分别是MD5、bcrypt、CRYPT、SHA,在httpd-tools2.2的版本中,默认使用的是CRYPT加密算法来进行密码加密的,而httpd-tools2.4的版本中,默认是使用MD5来进行密码加密的

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

在httpd-tools2.4的图中,最后一句话“TheSHAalgorithmdoesnotuseasaltandislesssecurethantheMD5algorithm”翻译一下就是,没有加salt的SHA算法,并没有MD5安全

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

解决办法

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

模拟验证演示

这里为了例子我们新建一个站点

域名:nginx_basic_auth.msy.plus登录名:admin密码:12345678

仅作为演示,生产环境不能使用这种极简单的密码

生成供测试文件echo"<h1>welcometonginx_basic_auth.msy.plus</h1>">>./nginx_basic_auth/index.html配置nginx的http基本验证

在nginx.conf中检查是否有对conf.d目录的支持如不存在,添加它

include/usr/local/soft/nginx-1.18.0/conf/conf.d/*.conf;

说明:生产环境中,为了管理方便,会把每个server放到专用的conf文件中,不要混在一起而全写到nginx.conf中,修改和查找都不方便

创建网站的server文件server{auth_basic"lhdtest.comadmin";auth_basic_user_file/usr/local/soft/nginx-1.18.0/conf/conf.d/admin.pwd;listen80;server_namenginx_basic_auth.msy.plusroot/data/site/admin/html;indexindex.htmlindex.shtmlindex.htm;access_log/data/nginx/logs/admin.access_log;error_log/data/nginx/logs/admin.error_log;}生成密码

nginx仅需要一个密码文件作为验证,而该密码文件在何处生成并不重要,所以你只需要一个可以生成该密钥的方法即可

方法很多,可以用python可以用go或者用c

当然也可以用各种工具辅助生成,在下列生成工具中挑一个你喜欢的方式吧

使用htpasswd生成密码

使用openssl生成密码

使用python生成密码

测试效果

进入网站输入正确的用户名和密码即可进入网站

关于nginx配置项有不了解的可以看这里

作者:moshuying