// Copyright 2011 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. // +build dragonfly freebsd linux nacl netbsd openbsd solaris package syscerts import ( "crypto/x509" "io/ioutil" ) // Possible directories with certificate files; stop after successfully // reading at least one file from a directory. var certDirectories = []string{ "/etc/ssl/certs", // SLES10/SLES11, https://golang.org/issue/12139 "/system/etc/security/cacerts", // Android } func initSystemRoots() { roots := x509.NewCertPool() for _, file := range certFiles { data, err := ioutil.ReadFile(file) if err == nil { roots.AppendCertsFromPEM(data) systemRoots = roots return } } for _, directory := range certDirectories { fis, err := ioutil.ReadDir(directory) if err != nil { continue } rootsAdded := false for _, fi := range fis { data, err := ioutil.ReadFile(directory + "/" + fi.Name()) if err == nil && roots.AppendCertsFromPEM(data) { rootsAdded = true } } if rootsAdded { systemRoots = roots return } } // All of the files failed to load. systemRoots will be nil which will // trigger a specific error at verification time. }