优化证书认证逻辑,增加回退用户认证功能,可选仅证书认证

This commit is contained in:
wsczx
2025-08-22 12:48:41 +08:00
parent 02a49b30a7
commit a44f2d6161
6 changed files with 24 additions and 14 deletions

View File

@@ -78,7 +78,7 @@ func LinkAuth(w http.ResponseWriter, r *http.Request) {
return
}
// 检查客户端证书认证
if base.Cfg.AuthAloneCert {
if base.Cfg.AuthCert {
if r.TLS != nil && len(r.TLS.PeerCertificates) > 0 {
clientCert := r.TLS.PeerCertificates[0]
username := clientCert.Subject.CommonName
@@ -107,13 +107,20 @@ func LinkAuth(w http.ResponseWriter, r *http.Request) {
ua.Info = "客户端证书验证失败"
ua.Status = dbdata.UserAuthFail
dbdata.UserActLogIns.Add(*ua, userAgent)
if base.Cfg.AuthOnlyCert {
base.Warn("已开启仅证书验证,但客户端证书验证失败,拒绝访问")
return
}
base.Warn("已开启证书验证,但客户端证书验证失败,回退到用户名密码验证")
}
} else {
if base.Cfg.AuthOnlyCert {
base.Warn("已开启仅证书验证,但客户端未提供有效证书,拒绝访问")
w.WriteHeader(http.StatusForbidden)
return
}
base.Warn("已开启证书验证,但客户端未提供有效证书,回退到用户名密码验证")
}
base.Warn("启用了独立证书验证,但用户未提供有效证书")
w.WriteHeader(http.StatusForbidden)
return
}
if cr.Type == "init" {

View File

@@ -72,10 +72,10 @@ func startTls() {
},
}
// 开启证书认证
if base.Cfg.AuthAloneCert {
if base.Cfg.AuthCert {
tlsConfig.ClientAuth = tls.VerifyClientCertIfGiven // 验证客户端证书
tlsConfig.ClientCAs = dbdata.LoadClientCAPool() // 加载客户端CA证书
base.Info("已启用独立证书验证")
base.Info("已启用客户端证书验证")
}
srv := &http.Server{
Addr: addr,