Files
steampipe/pkg/utils/ssl.go

55 lines
1.4 KiB
Go

package utils
import (
"bytes"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"fmt"
"log"
"os"
)
func ParseCertificateInLocation(location string) (*x509.Certificate, error) {
LogTime("db_local.parseCertificateInLocation start")
defer LogTime("db_local.parseCertificateInLocation end")
rootCertRaw, err := os.ReadFile(location)
if err != nil {
// if we can't read the certificate, then there's a problem with permissions
return nil, err
}
// decode the pem blocks
rootPemBlock, _ := pem.Decode(rootCertRaw)
if rootPemBlock == nil {
return nil, fmt.Errorf("could not decode PEM blocks from certificate at %s", location)
}
// parse the PEM Blocks to Certificates
return x509.ParseCertificate(rootPemBlock.Bytes)
}
func WriteCertificate(path string, certificate []byte) error {
return writeAsPEM(path, "CERTIFICATE", certificate)
}
func WritePrivateKey(path string, key *rsa.PrivateKey) error {
return writeAsPEM(path, "RSA PRIVATE KEY", x509.MarshalPKCS1PrivateKey(key))
}
func writeAsPEM(location string, pemType string, b []byte) error {
pemData := new(bytes.Buffer)
err := pem.Encode(pemData, &pem.Block{
Type: pemType,
Bytes: b,
})
if err != nil {
log.Println("[INFO] Failed to encode to PEM")
return err
}
if err := os.WriteFile(location, pemData.Bytes(), 0600); err != nil {
log.Println("[INFO] Failed to save pem at", location)
return err
}
return nil
}