plugin/alipay/utils/public_key.go

52 lines
1.1 KiB
Go

package utils
import (
"crypto/x509"
"encoding/pem"
"fmt"
"io/ioutil"
"strings"
)
// 从证书文件中提取公钥
func getPublicKey(certPath string) (string, error) {
// 读取证书文件内容
certData, err := ioutil.ReadFile(certPath)
if err != nil {
return "", fmt.Errorf("failed to read certificate file: %w", err)
}
// 解码 PEM 编码的证书
block, _ := pem.Decode(certData)
if block == nil {
return "", fmt.Errorf("failed to decode PEM block")
}
// 解析证书
cert, err := x509.ParseCertificate(block.Bytes)
if err != nil {
return "", fmt.Errorf("failed to parse certificate: %w", err)
}
// 获取公钥
pubKey := cert.PublicKey
// 转换公钥为 PEM 格式
pubKeyBytes, err := x509.MarshalPKIXPublicKey(pubKey)
if err != nil {
return "", fmt.Errorf("failed to marshal public key: %w", err)
}
// 创建 PEM 块
pemBlock := &pem.Block{
Type: "PUBLIC KEY",
Bytes: pubKeyBytes,
}
// 编码为 PEM 格式字符串
pemBytes := pem.EncodeToMemory(pemBlock)
publicKey := strings.TrimSpace(string(pemBytes))
return publicKey, nil
}