rollback test
This commit is contained in:
parent
f94e37f299
commit
d94d5ec27c
|
@ -1,73 +0,0 @@
|
|||
package credentials
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"encoding/pem"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
"google.golang.org/grpc/credentials"
|
||||
)
|
||||
|
||||
func CredentialsFromKeyWithPasswd(certFile, certKey, passwd string) (credentials.TransportCredentials, error) {
|
||||
if certFile == "" {
|
||||
return nil, errors.New("certFile cannot be empty")
|
||||
}
|
||||
if certKey == "" {
|
||||
return nil, errors.New("certKey cannot be empty")
|
||||
}
|
||||
|
||||
bts, err := os.ReadFile(certKey)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("os.ReadFile certKey: %s", err)
|
||||
}
|
||||
|
||||
keyBlock, rest := pem.Decode(bts)
|
||||
if keyBlock == nil {
|
||||
return nil, errors.New("not valid pem file")
|
||||
}
|
||||
if len(rest) > 0 {
|
||||
return nil, errors.New("rest is not empty")
|
||||
}
|
||||
|
||||
if !strings.Contains(keyBlock.Type, "ENCRYPTED") {
|
||||
return nil, fmt.Errorf("certificate should has been encrypted with password")
|
||||
}
|
||||
|
||||
decriptedKeyPem, err := decryptRSA(certKey, passwd)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("decryptRSA: %s", err)
|
||||
}
|
||||
|
||||
bts, err = os.ReadFile(certFile)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("os.ReadFile certFile: %s", err)
|
||||
}
|
||||
cert, err := tls.X509KeyPair(bts, []byte(decriptedKeyPem))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("tls.X509KeyPair: %s", err)
|
||||
}
|
||||
|
||||
return credentials.NewServerTLSFromCert(&cert), nil
|
||||
}
|
||||
|
||||
func decryptRSA(keyFile, password string) (string, error) {
|
||||
cmd := exec.Command("openssl", "rsa", "-in", keyFile, "-passin", formatPass(password), "-text")
|
||||
output_bts, err := cmd.Output()
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("cmd.Output: %s", err)
|
||||
}
|
||||
|
||||
idx := strings.Index(string(output_bts), "-----BEGIN")
|
||||
return string(output_bts)[idx:], nil
|
||||
}
|
||||
|
||||
func formatPass(password string) string {
|
||||
if password == "" {
|
||||
return ""
|
||||
}
|
||||
return "pass:" + password
|
||||
}
|
Loading…
Reference in New Issue