mirror of
				https://github.com/TeaOSLab/EdgeCommon.git
				synced 2025-11-04 05:00:24 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package sslconfigs
 | 
						|
 | 
						|
import (
 | 
						|
	"crypto/tls"
 | 
						|
	"github.com/iwind/TeaGo/maps"
 | 
						|
)
 | 
						|
 | 
						|
// 认证类型
 | 
						|
type SSLClientAuthType = int
 | 
						|
 | 
						|
const (
 | 
						|
	SSLClientAuthTypeNoClientCert               SSLClientAuthType = 0
 | 
						|
	SSLClientAuthTypeRequestClientCert          SSLClientAuthType = 1
 | 
						|
	SSLClientAuthTypeRequireAnyClientCert       SSLClientAuthType = 2
 | 
						|
	SSLClientAuthTypeVerifyClientCertIfGiven    SSLClientAuthType = 3
 | 
						|
	SSLClientAuthTypeRequireAndVerifyClientCert SSLClientAuthType = 4
 | 
						|
)
 | 
						|
 | 
						|
// 所有的客户端认证类型
 | 
						|
func AllSSLClientAuthTypes() []maps.Map {
 | 
						|
	return []maps.Map{
 | 
						|
		{
 | 
						|
			"name":      "不需要客户端证书",
 | 
						|
			"type":      SSLClientAuthTypeNoClientCert,
 | 
						|
			"requireCA": false,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"name":      "请求客户端证书",
 | 
						|
			"type":      SSLClientAuthTypeRequestClientCert,
 | 
						|
			"requireCA": true,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"name":      "需要客户端证书,但不校验",
 | 
						|
			"type":      SSLClientAuthTypeRequireAnyClientCert,
 | 
						|
			"requireCA": true,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"name":      "有客户端证书的时候才校验",
 | 
						|
			"type":      SSLClientAuthTypeVerifyClientCertIfGiven,
 | 
						|
			"requireCA": true,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"name":      "校验客户端提供的证书",
 | 
						|
			"type":      SSLClientAuthTypeRequireAndVerifyClientCert,
 | 
						|
			"requireCA": true,
 | 
						|
		},
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// 查找单个认证方式的名称
 | 
						|
func FindSSLClientAuthTypeName(authType SSLClientAuthType) string {
 | 
						|
	for _, m := range AllSSLClientAuthTypes() {
 | 
						|
		if m.GetInt("type") == authType {
 | 
						|
			return m.GetString("name")
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return ""
 | 
						|
}
 | 
						|
 | 
						|
// 认证类型和tls包内类型的映射
 | 
						|
func GoSSLClientAuthType(authType SSLClientAuthType) tls.ClientAuthType {
 | 
						|
	switch authType {
 | 
						|
	case SSLClientAuthTypeNoClientCert:
 | 
						|
		return tls.NoClientCert
 | 
						|
	case SSLClientAuthTypeRequestClientCert:
 | 
						|
		return tls.RequestClientCert
 | 
						|
	case SSLClientAuthTypeRequireAnyClientCert:
 | 
						|
		return tls.RequireAnyClientCert
 | 
						|
	case SSLClientAuthTypeVerifyClientCertIfGiven:
 | 
						|
		return tls.VerifyClientCertIfGiven
 | 
						|
	case SSLClientAuthTypeRequireAndVerifyClientCert:
 | 
						|
		return tls.RequireAndVerifyClientCert
 | 
						|
	}
 | 
						|
	return tls.NoClientCert
 | 
						|
}
 |