mirror of
https://github.com/tobychui/zoraxy.git
synced 2025-06-10 17:47:21 +02:00

+ Added comments for whitelist + Added automatic cert pick for multi-host certs (SNI) + Renamed .crt to .pem for cert store + Added best-fit selection for wildcard matching rules + Added x-proxy-by header + Added X-real-Ip header + Added Development Mode (Cache-Control: no-store) + Updated utm timeout to 10 seconds instead of 90
46 lines
1.0 KiB
Go
46 lines
1.0 KiB
Go
package tlscert
|
|
|
|
import (
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
// This remove the certificates in the list where either the
|
|
// public key or the private key is missing
|
|
func getCertPairs(certFiles []string) []string {
|
|
pemMap := make(map[string]bool)
|
|
keyMap := make(map[string]bool)
|
|
|
|
for _, filename := range certFiles {
|
|
if filepath.Ext(filename) == ".pem" {
|
|
pemMap[strings.TrimSuffix(filename, ".pem")] = true
|
|
} else if filepath.Ext(filename) == ".key" {
|
|
keyMap[strings.TrimSuffix(filename, ".key")] = true
|
|
}
|
|
}
|
|
|
|
var result []string
|
|
for domain := range pemMap {
|
|
if keyMap[domain] {
|
|
result = append(result, domain)
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
// Get the cloest subdomain certificate from a list of domains
|
|
func matchClosestDomainCertificate(subdomain string, domains []string) string {
|
|
var matchingDomain string = ""
|
|
maxLength := 0
|
|
|
|
for _, domain := range domains {
|
|
if strings.HasSuffix(subdomain, "."+domain) && len(domain) > maxLength {
|
|
matchingDomain = domain
|
|
maxLength = len(domain)
|
|
}
|
|
}
|
|
|
|
return matchingDomain
|
|
}
|