go / expert
Snippet
Isolierte X.509-Zertifikatskettenvalidierung mit benutzerdefinierten Überprüfungsoptionen
Standardmäßige TLS-Validierung nutzt Stammzertifikate der Host-Umgebung, was zu nicht-deterministischem Sicherheitsverhalten führen kann. Das Erstellen eines expliziten x509.CertPool und das Übergeben strenger x509.VerifyOptions erzwingt explizite Vertrauensanker, Host-SAN-Prüfbeschränkungen und Schlüsselverwendungsregeln.
snippet.go
go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package mainimport ("crypto/x509""fmt""time")func ValidateCertChain(leaf, root *x509.Certificate, dnsName string) error {roots := x509.NewCertPool()roots.AddCert(root)opts := x509.VerifyOptions{DNSName: dnsName,Roots: roots,CurrentTime: time.Now(),KeyUsages: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},}chains, err := leaf.Verify(opts)if err != nil {return fmt.Errorf("certificate verification failed: %w", err)}fmt.Printf("Verified %d valid trust chain(s)\n", len(chains))return nil}
Erklärung
1
chains, err := leaf.Verify(opts)
Führt eine vollständige Zertifikats-Graphpfadvalidierung anhand expliziter Root-Anker, DNS-Namen und Gültigkeitszeiträume durch.