帶你深入了解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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM