zoukankan      html  css  js  c++  java
  • 带你深入了解nginx基本登录认证(包含配置步骤)

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

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

    http基本验证的作用

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

    这个登录认证安全吗?

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

    通常和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

    这里我用的是windows下的centos子系统,直接生成该密钥上传到服务器即可

    生成工具选择htpasswd,htpasswd 是开源 http 服务器 apache httpd 的一个命令工具,用于生成 http 基本认证的密码文件。

    安装htpasswd

    ubuntu安装:

    sudo apt-get install apache2-utils
    

    centos安装:

    yum -y install httpd
    

    密钥生成选项

    这里使用如下生成选项

    #-n:Don't update file; display results on stdout //不更新文件;在标准输出上显示结果
    #-b:Use the password from the command line //从命令行使用密码
    #-m:Force MD5 encryption of the password //强制对密码进行MD5加密
    

    输入命令生成密钥

    htpasswd -nbm admin 12345678
    

    可以看到输出有密钥

    admin:$apr1$nkxLxBPa$EGa.u5yKuQ08m6g/8bGb9.
    

    在你之前所指定的密码文件中,输入生成的内容即可

    auth_basic_user_file /usr/local/soft/nginx-1.18.0/conf/conf.d/admin.pwd; // 对于windows server用户来说,路径可能略有不同
    

    测试效果

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

    参考文章

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

  • 相关阅读:
    生成更大的陆地 Making A Large Island
    HDU 3342 Legal or Not【拓扑排序】
    POJ 2367 Genealogical tree【拓扑排序】
    CodeForces Round #290 Div.2
    HDU 1010 Tempter of the Bone【DFS】
    HDU 1312 Red and Black【DFS】
    POJ 1664 放苹果【DFS】
    HDU 1587 Flowers【贪心】
    Codeforces Round #289 Div 2
    HDU 1241 Oil Deposits【DFS】
  • 原文地址:https://www.cnblogs.com/moshuying/p/15140226.html
Copyright © 2011-2022 走看看