34 lines
781 B
Go
34 lines
781 B
Go
|
package targets
|
||
|
|
||
|
import (
|
||
|
"crypto/x509"
|
||
|
"encoding/base64"
|
||
|
"errors"
|
||
|
"io/ioutil"
|
||
|
)
|
||
|
|
||
|
// GetCertPool returns a x509.CertPool containing the cert(s)
|
||
|
// from `cert`, which can be a path to a .pem or .crt file,
|
||
|
// or a base64 encoded cert.
|
||
|
func GetCertPool(cert string) (*x509.CertPool, error) {
|
||
|
if cert == "" {
|
||
|
return nil, errors.New("no cert provided")
|
||
|
}
|
||
|
|
||
|
// first treat as a file and try to read.
|
||
|
serverCert, err := ioutil.ReadFile(cert)
|
||
|
if err != nil {
|
||
|
// maybe it's a base64 encoded cert
|
||
|
serverCert, err = base64.StdEncoding.DecodeString(cert)
|
||
|
if err != nil {
|
||
|
return nil, errors.New("cert cannot be read")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
pool := x509.NewCertPool()
|
||
|
if ok := pool.AppendCertsFromPEM(serverCert); ok {
|
||
|
return pool, nil
|
||
|
}
|
||
|
return nil, errors.New("cannot parse cert")
|
||
|
}
|