婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解nginx basic auth配置踩坑記

詳解nginx basic auth配置踩坑記

熱門標簽:大連400電話如何申請 電銷機器人怎么接線路 外呼系統坐席費計入會計哪個科目 高德地圖標注好做嗎 如何分析地圖標注 達亞電銷機器人官網 電銷機器人價值 新余高德地圖標注怎么修改 撫順地圖標注

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 util

import (
  "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支持的對密碼加密的字符串。

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

標簽:南通 海東 新鄉 楊凌 遼源 黃石 湖南 衡水

巨人網絡通訊聲明:本文標題《詳解nginx basic auth配置踩坑記》,本文關鍵詞  詳解,nginx,basic,auth,配置,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解nginx basic auth配置踩坑記》相關的同類信息!
  • 本頁收集關于詳解nginx basic auth配置踩坑記的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产综合色在线视频区| 69堂成人精品免费视频| 亚洲免费观看高清| 日韩欧美你懂的| 91久久奴性调教| 成人天堂资源www在线| 美日韩黄色大片| 婷婷激情综合网| 天堂成人国产精品一区| 亚洲国产一区视频| 一区二区欧美在线观看| 亚洲视频在线观看三级| 亚洲乱码国产乱码精品精98午夜 | 99视频一区二区| 成人丝袜视频网| 国产suv一区二区三区88区| 国产精品一二三| 国产成人亚洲精品狼色在线| 国产一区啦啦啦在线观看| 国产一区久久久| 成人黄色小视频在线观看| 成人动漫中文字幕| 一本色道a无线码一区v| 99re热视频精品| 懂色av一区二区夜夜嗨| 色综合久久久久| 91福利区一区二区三区| 欧美激情一区二区在线| 国产农村妇女毛片精品久久麻豆 | 欧美性高清videossexo| 91精彩视频在线| 欧美天天综合网| 日韩一级片网站| 亚洲精品一区二区精华| 国产喷白浆一区二区三区| 中文字幕一区二区三区在线观看 | 欧美国产日韩在线观看| 国产精品成人免费精品自在线观看| 青青青爽久久午夜综合久久午夜| 欧美日韩大陆一区二区| 免费亚洲电影在线| 亚洲成人高清在线| 美腿丝袜亚洲三区| 成人免费毛片app| 欧美亚洲国产一区二区三区va | 久久99精品视频| 成人毛片老司机大片| 91高清在线观看| 日韩欧美自拍偷拍| √…a在线天堂一区| 青娱乐精品视频在线| av电影在线观看不卡| 91精品国产黑色紧身裤美女| 精品国产免费视频| 色老综合老女人久久久| 日韩一区二区三区高清免费看看| 亚洲国产电影在线观看| 亚洲电影第三页| 欧美日韩电影在线| 久久久久久久久久久电影| 亚洲伊人伊色伊影伊综合网| 国产在线精品免费av| 91香蕉视频黄| 26uuu久久综合| 亚洲一区在线观看免费观看电影高清| 国产美女在线观看一区| 8x福利精品第一导航| 《视频一区视频二区| 韩国成人在线视频| 欧美精品aⅴ在线视频| 亚洲免费成人av| eeuss国产一区二区三区| 精品久久一区二区| 日韩一区二区三区精品视频| 免费在线看一区| 91免费在线视频观看| 国产精品888| www.亚洲色图.com| 欧美高清视频不卡网| 91天堂素人约啪| 精品处破学生在线二十三| 一区二区三区小说| 99久久精品情趣| 国产色综合久久| 国产一区三区三区| 日韩一级免费一区| 日韩黄色免费网站| 欧美日韩国产大片| 一区二区免费在线播放| 91亚洲精品久久久蜜桃网站| 久久看人人爽人人| 一区二区三区电影在线播| 成人免费视频app| 处破女av一区二区| 精品久久人人做人人爽| 男女性色大片免费观看一区二区 | 欧美精品日日鲁夜夜添| 亚洲资源中文字幕| 精品视频999| 天天影视网天天综合色在线播放| 欧美做爰猛烈大尺度电影无法无天| 国产精品白丝在线| 97精品国产露脸对白| 亚洲色欲色欲www| 欧美亚洲国产一区二区三区va| 亚洲一区二区三区中文字幕在线| 在线视频国内一区二区| 亚洲国产cao| 欧美v日韩v国产v| 欧美日韩不卡视频| 日韩电影在线免费观看| 欧美一区二区三区白人| 国精产品一区一区三区mba桃花 | 欧美优质美女网站| 日欧美一区二区| 国产麻豆精品视频| 国产欧美日韩三级| 精品日产卡一卡二卡麻豆| 一区二区三区日韩欧美| 欧美三级三级三级| 欧美aaaaaa午夜精品| 久久综合久久综合亚洲| 大白屁股一区二区视频| 日韩理论在线观看| 欧美久久久一区| 国产精品88888| 亚洲成人动漫一区| 久久色视频免费观看| 色噜噜久久综合| 精品一区二区免费看| 亚洲欧美激情插| 欧美v亚洲v综合ⅴ国产v| 99麻豆久久久国产精品免费 | 国产乱子伦一区二区三区国色天香| 亚洲国产精品99久久久久久久久| 97se亚洲国产综合自在线不卡| 日韩精品欧美精品| 亚洲天堂免费在线观看视频| 欧美电影在线免费观看| av在线不卡网| 国内外成人在线视频| 亚洲欧美日韩一区二区三区在线观看 | 欧美视频一区在线| 国产91精品露脸国语对白| 午夜精品久久久久久久久久久| 国产欧美一区视频| 日韩欧美第一区| 欧美视频第二页| www.欧美色图| 国产专区欧美精品| 天天综合色天天| 一区二区三区日韩欧美精品 | 91久久精品一区二区| 久久成人免费电影| 天天影视网天天综合色在线播放| 亚洲免费在线看| 国产欧美精品一区| 精品免费视频.| 制服丝袜av成人在线看| 欧美三区在线观看| 91免费看`日韩一区二区| 高清不卡一区二区| 国产一区二区h| 久久99精品久久久久久动态图 | xvideos.蜜桃一区二区| 日本乱码高清不卡字幕| 成人在线视频首页| 国产69精品久久777的优势| 蜜桃av一区二区在线观看| 五月天久久比比资源色| 亚洲一区二区三区四区中文字幕| 日韩美女视频一区二区| 亚洲人成网站精品片在线观看| 国产精品入口麻豆原神| 亚洲国产精品av| 国产精品久久夜| 亚洲欧洲日产国码二区| 国产精品久久久久久久午夜片| 国产日产欧美一区| 国产欧美一区二区精品性色| 国产欧美日韩综合| 国产精品视频线看| 亚洲日本成人在线观看| 一区二区欧美精品| 视频在线在亚洲| 久久不见久久见免费视频7| 福利电影一区二区三区| 久久免费视频一区| 欧美视频在线一区| 欧美日韩国产天堂| 久久aⅴ国产欧美74aaa| 久草热8精品视频在线观看| 久久精品理论片| 国产精品一区二区男女羞羞无遮挡| 国产乱人伦偷精品视频免下载| 国产精品中文欧美| 91社区在线播放| 91精品国产色综合久久ai换脸| 欧美mv日韩mv亚洲| 国产精品美女久久久久久|