package certs import ( "encoding/pem" "errors" ) // 从 PEM 编码的证书字符串解析并提取服务器证书和中间证书。 // // 入参: // - certPem: 证书 PEM 内容。 // // 出参: // - serverCertPem: 服务器证书的 PEM 内容。 // - interCertPem: 中间证书的 PEM 内容。 // - err: 错误。 func ExtractCertificatesFromPEM(certPem string) (serverCertPem string, interCertPem string, err error) { pemBlocks := make([]*pem.Block, 0) pemData := []byte(certPem) for { block, rest := pem.Decode(pemData) if block == nil || block.Type != "CERTIFICATE" { break } pemBlocks = append(pemBlocks, block) pemData = rest } serverCertPem = "" interCertPem = "" if len(pemBlocks) == 0 { return "", "", errors.New("failed to decode PEM block") } if len(pemBlocks) > 0 { serverCertPem = string(pem.EncodeToMemory(pemBlocks[0])) } if len(pemBlocks) > 1 { for i := 1; i < len(pemBlocks); i++ { interCertPem += string(pem.EncodeToMemory(pemBlocks[i])) } } return serverCertPem, interCertPem, nil }