// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package fallback embeds a set of fallback X.509 trusted roots in the // application by automatically invoking [x509.SetFallbackRoots]. This allows // the application to work correctly even if the operating system does not // provide a verifier or system roots pool. // // To use it, import the package like // // import _ "golang.org/x/crypto/x509roots/fallback" // // It's recommended that only binaries, and not libraries, import this package. // // This package must be kept up to date for security and compatibility reasons. // Use govulncheck to be notified of when new versions of the package are // available. package fallback import ( "crypto/x509" "golang.org/x/crypto/x509roots/fallback/bundle" ) func init() { x509.SetFallbackRoots(newFallbackCertPool()) } func newFallbackCertPool() *x509.CertPool { p := x509.NewCertPool() for c := range bundle.Roots() { cert, err := x509.ParseCertificate(c.Certificate) if err != nil { panic(err) } if c.Constraint == nil { p.AddCert(cert) } else { p.AddCertWithConstraint(cert, c.Constraint) } } return p }