Teniendo un problema convirtiendo PFX a Pem.
Estoy intentando convertir un archivo PFX
a PEM
sin éxito debido a este error:
pkcs12: error leyendo datos P12: error de sintaxis: se encontró longitud indefinida (no DER)
Al buscar en línea, se indica que se debe codificar BER
a DER
y luego ToPEM
no arrojará este error molesto. No pude encontrar ninguna solución en absoluto.
El archivo pfx
está codificado con base64
y decodificado a []byte
, lo cual no debería afectar el error en ningún caso.
No tengo ninguna opción para cambiar el archivo pfx
que se inserta en esta variable config.ClusterCertificate
.
El código:
blocks, err := pkcs12.ToPEM(config.ClusterCertificate, "")
if err != nil {
return nil, err
}
var pemData []byte
for _, b := range blocks {
pemData = append(pemData, pem.EncodeToMemory(b)...)
}
// luego use los datos PEM para construir el certificado TLS:
cert, err := tls.X509KeyPair(pemData, pemData)
if err != nil {
return nil, err
}
config := &tls.Config{
Certificates: []tls.Certificate{cert},
}
_ = config
x509cert, err := x509.ParseCertificate(cert.Certificate[0])
if err != nil {
return nil, err
}
store.TrustStore = x509cert
store.Certificate = &cert
certutil dump
davy.ai
Solución para convertir PFX a PEM
El error de
asn1: error de sintaxis: se encontró longitud indefinida (no DER)
al convertir PFX a PEM se puede resolver codificando BER a DER antes de convertirlo a PEM.El siguiente código se puede utilizar para convertir el archivo PFX a PEM sin el error anterior.
En el código anterior, primero intentamos convertir el archivo PFX a PEM utilizando
pkcs12.ToPEM
. Si falla con el error anterior, luego decodificamos el archivo PFX de base64 y lo analizamos utilizandopkcs12.Parse
. Luego codificamos BER a DER utilizandopkcs12.Encode
e intentamos convertirlo a PEM nuevamente utilizandopkcs12.ToPEM
.Si hay algún otro error durante la conversión a PEM, registramos el error y salimos.
Por último, analizamos el certificado utilizando
x509.ParseCertificate
y establecemos las variablesTrustStore
yCertificate
.