Как загрузить расшифрованный файл зашифрованного ключа для сертификата в Go?
У меня есть файл сертификата и файл ключа, где файл ключа зашифрован паролем. Я пытаюсь расшифровать файл ключа программно перед загрузкой пары ключей.
// Key file and cert file path
cf := filepath.Join(certPath, certFile)
kf := filepath.Join(certPath, keyFile)
//Read & decode the encrypted key file with the pass to make tls work
keyIn, err := ioutil.ReadFile(kf)
if err != nil {
log.Error("Read key error", err)
return nil, err
}
// Decode and decrypt our PEM block
decodedPEM, _ := pem.Decode([]byte(keyIn))
decrypedPemBlock, err := x509.DecryptPEMBlock(decodedPEM, []byte("somepassword"))
if err != nil {
log.Error("decrypt key error", err)
return nil, err
}
// Load our decrypted key pair
crt, err := tls.LoadX509KeyPair(cf, string(decrypedPemBlock))
if err != nil {
log.Error("load key pair error", err)
return nil, err
}
Исходные сертификаты и ключ были сгенерированы с использованием следующих параметров openssl
openssl req -new -newkey rsa:2048 -x509 -keyout $CA_CERT.key -out $CA_CERT -days $validity -passin "pass:$password" -passout "pass:$password" -subj "/C=$C/ST=$ST/L=$L/O=$O/CN=$CN/emailAddress=$EMAIL"
Переменные заменяются соответственно на $password, являющийся "somepassword"
Я попытался расшифровать ключ с помощью openssl rsa из командной строки, и он отлично работает с паролем выше.
Однако в Go я получаю сообщение об ошибке в tls.LoadX509KeyPair, говоря неверный аргумент.
time="2018-01-17T18:57:40Z" level=error msg="load key pair error: open
Мое лучшее предположение состоит в том, что кодировка ключа может быть испорчена, и мне было интересно, если что-то не так с моим кодом.
Обновление: добавлено сообщение об ошибке, и похоже, что tls.LoadX509KeyPair не может понять формат, как указано в комментариях ниже.