nginx basic auth配置踩坑記

2021-09-13 16:04:31 字數 1911 閱讀 7636

nginx的basic auth配置由ngx_http_auth_basic_module模組提供,對http basic authentication協議進行了支援,使用者可通過該配置設定使用者名稱和密碼對web站點進行簡單的訪問控制。

basic auth配置示例:

location /
說明:

踩坑的地方就是這個密碼,官方文件裡對支援的密碼型別進行了說明:

使用htpasswd或者openssl passwd命令生成的密碼固然可以使得配置生效,nginx能夠正常地進行密碼安全校驗,如果密碼型別不支援, 則nginx或報錯:

crypt_r() failed (22: invalid argument)
但是因為業務的需要,我們要用**生成nginx的配置並下發配置到每個雲主機中,之後拉起nginx程序。專案**使用go語言編寫,所以需要找乙個對應的函式或者庫生成nginx支援的密碼。

在進行自動生成密碼開發之前,思考了一下大概有三種方案可以實現:

首先,第一種方式是不太可取的,因為需要強依賴伺服器環境,所以直接pass。下面看第二種和第三種方式的具體實現。

linux的crypt函式有兩個引數,函式定義為:

char *crypt(const char *key, const char *salt);
其中引數key為需要加密的內容,salt引數有兩種型別:

go語言中可以通過import "c"方式直接呼叫c語言的庫函式,下面是封裝crypt函式的具體實現:

package crypt

/*#define _gnu_source

#include */

import "c"

import (

"sync"

"unsafe"

)var (

mu sync.mutex

)func crypt(pass, salt string) (string, error)

defer c.free(unsafe.pointer(c_enc))

return c.gostring(c_enc), err

}

生成密碼的具體實現:

func main() 

sha512, err := crypt.crypt("elastic123", "$6$somesaltsomepepper$")

if err != nil

fmt.println("des:", des)

fmt.println("sha512:", sha512)

}

經過實測,上述通過呼叫crypt函式生成nginx支援的加密密碼實際可用,但是需要注意的是如果密碼長度超過8位,則salt引數只能選擇$id$salt$encrypted型別,在測試過程中就是因為踩了這點坑導致nginx只能校驗密碼的前8位,無語。

因為在編寫go**過程中呼叫了c函式庫,這種方式也需要依賴伺服器所處環境,因此最好的方式是採用go標準庫中的函式對密碼進行加密。

go的crypto標準庫封裝了很多中加密演算法,採用sha加密演算法進行密碼加密的**如下:

package util

import (

"crypto/sha1"

"encoding/base64"

)func getsha(password string) string

測試過程中通過呼叫getsha()函式生成了對密碼加密的字串,但是直接配置在nginx的conf/htpasswd檔案中,reload nginx配置後測試驗證密碼是否生效,結果還是報錯,原來如前文所述,sha加密的密碼必須帶有「」字首才可以,再次修改配置後經過驗證,成功地用**生成了nginx支援的對密碼加密的字串。

nginx basic auth 登陸驗證模組

1.新建乙個pw.pl檔案專門用來生成密碼 usr bin perl use strict my pw argv 0 print crypt pw,pw n 2.修改nginx配置檔案,新增,使用者名稱和密碼存放的位置 auth basic nginx status auth basic user ...

nginx basic auth 登陸驗證模組

1.新建乙個pw.pl檔案專門用來生成密碼 usr bin perl use strict my pw ar 0 print crypt pw,pw n 2.修改nginx配置檔案,新增,使用者名稱和密碼存放的位置 auth basic nginx status auth basic user fi...

websphere datasource配置檔案

1 ibm websphere 6.0 配置檔案可能藏身之地 d program files ibm rational sdp 6.0 runtimes base v6 profiles default config 2 wsc副檔名 或資料夾為 wsc 為websphere config目錄 3 ...