vaulterm/server/lib/crypto.go

38 lines
816 B
Go

package lib
import (
"crypto/tls"
"crypto/x509"
"encoding/pem"
"fmt"
)
func LoadClientCertificate(clientCert string, clientKey string) (*tls.Certificate, error) {
// Client certificate
ccb, _ := pem.Decode([]byte(clientCert))
if ccb == nil {
return nil, fmt.Errorf("failed to parse client certificate")
}
cert, err := x509.ParseCertificate(ccb.Bytes)
if err != nil {
return nil, fmt.Errorf("failed to parse client certificate: %v", err)
}
// Client key
ckb, _ := pem.Decode([]byte(clientKey))
if ckb == nil {
return nil, fmt.Errorf("failed to parse client key")
}
key, err := x509.ParsePKCS8PrivateKey(ckb.Bytes)
if err != nil {
return nil, fmt.Errorf("failed to parse client key: %v", err)
}
return &tls.Certificate{
Certificate: [][]byte{cert.Raw},
PrivateKey: key,
}, nil
}