亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > Nginx > 正文

詳解nginx basic auth配置踩坑記

2024-08-30 12:29:44
字體:
來源:轉載
供稿:網友

nginx的basic auth配置由ngx_http_auth_basic_module模塊提供,對HTTP Basic Authentication協議進行了支持,用戶可通過該配置設置用戶名和密碼對web站點進行簡單的訪問控制。

basic auth配置示例:

location / {  auth_basic      "closed site";  auth_basic_user_file conf/htpasswd;}

說明:

  1. auth_basic可設置為off或其它字符串,為off時表示不開啟密碼驗證
  2. auth_basic_user_file 為包含用戶名和密碼的文件,文件內容如elastic:YsEm9Tb4.RwB6

踩坑的地方就是這個密碼,官方文檔里對支持的密碼類型進行了說明:

  1. 采用系統函數crypt()加密的密碼;可通過htpasswd命令或者openssl passwd命令生成
  2. 通過Apache提供的基于MD5的變種加密算法(apr1),同樣可通過htpasswd或者openssl passwd命令生成
  3. 以“{scheme}data”格式表示的加密后的密碼,RFC 2307中有對該格式的密碼標準進行了說明。其中scheme指的是加密算法,nginx支持的scheme有PLAIN, SHA,SSHA算法。

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

crypt_r() failed (22: Invalid argument)

但是因為業務的需要,我們要用代碼生成nginx的配置并下發配置到每個云主機中,之后拉起nginx進程。項目代碼使用go語言編寫,所以需要找一個對應的函數或者庫生成nginx支持的密碼。

go語言生成nginx支持的密碼

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

  1. 項目服務器上安裝htpasswd工具或openssl, 通過代碼執行本地命令生成加密密碼
  2. 直接調用Linux系統函數crypt()加密密碼
  3. 使用go標準庫crypto加密密碼

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

直接調用系統函數crypt()

Linux的crypt函數有兩個參數,函數定義為:

char *crypt(const char *key, const char *salt);

其中參數key為需要加密的內容,salt參數有兩種類型:

  1. 長度為2的字符串,取值范圍為[a-zA-Z0-9./],如果超過兩位會被忽略,并且只能支持最長8位的key,如果key超過8位,則8位之后的會被忽略
  2. $id$salt$encrypted 格式,用于支持其它的加密算法, id表示算法類型,具體取值有:
ID | Method  ─────────────────────────────────────────────  1  | MD5  2a | Blowfish (not in mainline glibc; added in some    | Linux distributions)  5  | SHA-256 (since glibc 2.7)  6  | SHA-512 (since glibc 2.7)

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

package crypt/*#define _GNU_SOURCE#include <unistd.h>*/import "C"import (  "sync"  "unsafe")var (  mu sync.Mutex)func Crypt(pass, salt string) (string, error) {  c_pass := C.CString(pass)  defer C.free(unsafe.Pointer(c_pass))  c_salt := C.CString(salt)  defer C.free(unsafe.Pointer(c_salt))  mu.Lock()  c_enc, err := C.crypt(c_pass, c_salt)  mu.Unlock()  if c_enc == nil {    return "", err  }  defer C.free(unsafe.Pointer(c_enc))  return C.GoString(c_enc), err}

生成密碼的具體實現:

func main() {  des, err := crypt.Crypt("Elastic123", "in")  if err != nil {    fmt.Errorf("error:", err)    return  }  sha512, err := crypt.Crypt("Elastic123", "$6$SomeSaltSomePepper$")  if err != nil {    fmt.Errorf("error:", err)    return  }  fmt.Println("des:", des)  fmt.Println("SHA512:", sha512)}

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

因為在編寫go代碼過程中調用了C函數庫,這種方式也需要依賴服務器所處環境,因此最好的方式是采用go標準庫中的函數對密碼進行加密。

使用crypto函數庫

go的crypto標準庫封裝了很多中加密算法,采用SHA加密算法進行密碼加密的代碼如下:

package utilimport (  "crypto/sha1"  "encoding/base64")func GetSha(password string) string {  s := sha1.New()  s.Write([]byte(password))  passwordSum := []byte(s.Sum(nil))  return base64.StdEncoding.EncodeToString(passwordSum)}

測試過程中通過調用GetSha()函數生成了對密碼加密的字符串,但是直接配置在nginx的conf/htpasswd文件中,reload nginx配置后測試驗證密碼是否生效,結果還是報錯,原來如前文所述,SHA加密的密碼必須帶有“{SHA}”前綴才可以,再次修改配置后經過驗證,成功地用代碼生成了nginx支持的對密碼加密的字符串。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品av免费在线观看| 欧美有码在线视频| 久久久免费高清电视剧观看| 欧美日韩福利视频| 日韩欧美高清在线视频| 欧美三级免费观看| 国产精品国产三级国产aⅴ9色| 日韩视频在线一区| 5252色成人免费视频| 国产精品99久久久久久久久久久久| 成人免费视频xnxx.com| 成人久久18免费网站图片| 最近2019好看的中文字幕免费| 91青草视频久久| 国产精品入口免费视| 欧美日韩在线视频观看| 久久久亚洲国产天美传媒修理工| 亚洲欧洲美洲在线综合| 亚洲午夜未删减在线观看| 中文字幕亚洲一区| 国产精品电影久久久久电影网| 亚洲精品国产品国语在线| 亚洲a区在线视频| 26uuu日韩精品一区二区| 91精品国产高清久久久久久| 福利一区福利二区微拍刺激| 麻豆一区二区在线观看| 亚洲欧美日韩在线高清直播| 韩曰欧美视频免费观看| 伊人激情综合网| 色99之美女主播在线视频| 日av在线播放中文不卡| 亚洲在线视频福利| 中文字幕亚洲欧美日韩在线不卡| 欧美亚洲国产精品| 日本成人精品在线| 亚洲精品网站在线播放gif| 国产精品激情av在线播放| 欧美视频精品一区| 国产亚洲欧美日韩一区二区| 欧美日韩激情视频8区| 日韩欧美一区二区三区久久| 欧美高清视频免费观看| 92看片淫黄大片看国产片| 日韩精品视频在线观看网址| 亚洲精品电影网| 国产91色在线免费| 久久久免费电影| 亚洲国产第一页| 最新中文字幕亚洲| 国产精品中文久久久久久久| 岛国av一区二区在线在线观看| 亚洲国产成人爱av在线播放| 91在线|亚洲| 超在线视频97| 精品亚洲永久免费精品| 欧洲日本亚洲国产区| 欧美国产激情18| 亚洲国产精品999| 欧美日韩色婷婷| 一本大道香蕉久在线播放29| 国产精品吹潮在线观看| 欧美日韩国内自拍| 在线精品视频视频中文字幕| 午夜精品福利在线观看| 一区二区欧美激情| 欧美激情一级二级| 国产精品www色诱视频| 久久久噜噜噜久久中文字免| 亚洲qvod图片区电影| 欧美另类精品xxxx孕妇| 国产精欧美一区二区三区| 日韩精品在线影院| 欧美制服第一页| 精品一区二区三区四区| 欧美激情18p| 欧美黄色www| 国产成人高清激情视频在线观看| 精品亚洲va在线va天堂资源站| 国产噜噜噜噜噜久久久久久久久| 国产精品国内视频| 亚洲欧美国产一区二区三区| 国产精品电影久久久久电影网| 国产v综合ⅴ日韩v欧美大片| 国产精品99久久久久久久久| 日本一区二区在线免费播放| 精品成人在线视频| 欧美成人免费va影院高清| 性夜试看影院91社区| 成人免费淫片aa视频免费| 国产精品第100页| 国产成人精品在线视频| 久久久噜噜噜久久| 一区二区av在线| 欧美黑人一区二区三区| 最近免费中文字幕视频2019| 91精品国产九九九久久久亚洲| 4438全国成人免费| 中文字幕亚洲欧美在线| 国产成人精品一区二区在线| 久久免费精品日本久久中文字幕| 日韩中文字幕视频在线观看| 欧美激情视频一区| 中国人与牲禽动交精品| 欧美另类交人妖| 国产精品色婷婷视频| www.日韩视频| 国产一区二区精品丝袜| 秋霞午夜一区二区| 亚洲qvod图片区电影| 亚洲精品久久久久国产| 亚洲娇小xxxx欧美娇小| 国产精品男人爽免费视频1| 欧美国产中文字幕| 亚洲激情第一页| 97涩涩爰在线观看亚洲| 国产日产欧美a一级在线| 深夜福利91大全| 国产剧情日韩欧美| 欧美性猛交xxxxx免费看| 欧美另类xxx| 中文字幕在线视频日韩| 久久国产视频网站| 国产日韩欧美成人| 欧美日本亚洲视频| 欧美一级bbbbb性bbbb喷潮片| 久久99青青精品免费观看| 国产亚洲欧美另类中文| 欧美精品激情在线观看| 最近2019免费中文字幕视频三| 在线一区二区日韩| 国产成人涩涩涩视频在线观看| 亚洲xxx大片| 日产精品99久久久久久| 亚洲国产成人精品电影| 国产91精品视频在线观看| 高清欧美性猛交xxxx黑人猛交| 欧美激情中文网| 精品免费在线视频| 国产丝袜一区二区三区| 久久精品成人一区二区三区| 亚洲欧洲成视频免费观看| 欧美xxxx做受欧美.88| 国产精品视频一区二区高潮| 色偷偷888欧美精品久久久| 午夜精品视频在线| 国产精品流白浆视频| 日韩精品免费视频| 自拍偷拍亚洲一区| 久久精品一偷一偷国产| 日韩免费观看网站| 亚洲精品美女在线观看| www.欧美免费| 日韩欧美亚洲一二三区| 国产91色在线播放| 亚洲一区二区免费| 中文字幕欧美国内| 国产亚洲欧美日韩美女| 日本伊人精品一区二区三区介绍| 91免费看片网站| 日韩动漫免费观看电视剧高清| 亚洲精品网站在线播放gif| 2018中文字幕一区二区三区| 69精品小视频|