头图

带你深入了解nginx基本登录认证(包含所有配置步骤和深度解析)

点击访问msy.plus获得更好的体验

http基本验证的作用

  1. http基本身份验证会从浏览器弹出登录窗口,
  2. 简单明了,容易理解,
  3. 对于面向终端用户的前台来说,不够友好,
  4. 但对于内部员工操作的后台还是很有用,通常作为一层安全措施应用。

这个登录认证安全吗?

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

<!--more-->

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

可能存在的问题

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

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

有人说明明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加密方式生成新的用户密码对

模拟验证演示

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

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

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

生成供测试文件

echo "<h1>welcome to nginx_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.com admin";
    auth_basic_user_file /usr/local/soft/nginx-1.18.0/conf/conf.d/admin.pwd;

    listen       80;
    server_name  nginx_basic_auth.msy.plus
    root         /data/site/admin/html;
    index        index.html index.shtml  index.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配置项有不了解的可以看这里

本系列文章

带你深入了解nginx基本登录认证(包含所有配置步骤和深度解析)
带你深入了解nginx基本登录认证:使用htpasswd生成密码
带你深入了解nginx基本登录认证:使用openssl生成密码
带你深入了解nginx基本登录认证:使用python生成密码

参考

nginx配置禁特定路径下的反向代理
nginx配置禁止访问目录或禁止访问目录下的文件
nginx跨域处理

你的nginx登录认证安全吗?
配置http基本验证(Basic Auth)
Centos安装htpasswd_Nginx中使用htpasswd


前端与算法
前端与算法系列合集

msy.plus

74 声望
11 粉丝
0 条评论
推荐阅读
【css灵感】模拟3D地球
在css中有3d变换的方法,一般用它做一些矩形的效果,如果是圆形则比较困难了。这里用一种障眼法的方式实现了3d的效果。点击这里查看无纯净广告版实现方法 {代码...}

墨抒颖1阅读 1.1k

花了半个小时基于 ChatGPT 搭建了一个微信机器人
相信大家最近被 ChatGPT 刷屏了,其实在差不多一个月前就火过一次,不会那会好像只在程序员的圈子里面火起来了,并没有被大众认知到,不知道最近是因为什么又火起来了,而且这次搞的人尽皆知。

Java极客技术12阅读 3.5k评论 3

封面图
如何选择适合你的微服务 API 网关:对比 Kong、APISIX、Tyk、Apigee 和其他网关
API 网关并非一个新兴的概念,在十几年前就已经存在了,它的作用主要是作为流量的入口,统一的处理和业务相关的请求,让请求更加安全、快速和准确的得到处理。它有以下传统的功能:

API7_技术团队8阅读 8.7k评论 2

花了几个月时间把 MySQL 重新巩固了一遍,梳理了一篇几万字 “超硬核” 的保姆式学习教程!(持续更新中~)
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

民工哥11阅读 1.1k

封面图
张晋涛:我的 2022 总结
大家好,我是张晋涛。2022 年已经结束,我每年都会惯例的做个小回顾,今年因为阳了在恢复身体,一直拖到了今天才写。生活在 2022 年初做回顾的时候,觉得 2021 是魔幻的一年,但现在看来 2022 年其实更加魔幻。一...

张晋涛6阅读 1.1k评论 2

封面图
利用Docker部署管理LDAP及其初次使用
前言:本周主要写了gitlabWebhook转github的项目,总体上没有遇到什么大问题,这周接触到了LDAP,于是就花时间实际操作了解了一下。

李明5阅读 1.3k

Docker学习:Image的本地存储结构
在使用Docker时候,针对镜像的操作一般就是docker pull,docker build,docker commit(刚开始接触Docker的时候,还不会Dockerfile,经常使用这个命令,但是经历了一次血的教训,已经放弃这个命令很久)这些操作...

backbp4阅读 10k评论 3

msy.plus

74 声望
11 粉丝
宣传栏