Как преобразовать кодированный base64 p12 в tls.Certificate - PullRequest
0 голосов
/ 06 марта 2019

У меня есть сгенерированный файл base64 .p12 для аутентификации в службе, и мой клиент-клиент ожидает получить сертификат tls.Certificate.

Однако pkcs12.Decode всегда завершается с ошибкой ": asn1: синтаксическая ошибка: обнаружена неопределенная длина (не DER)"

Означает ли это, что мне нужно преобразовать файл .p12 в кодировке base64 в файл формата der? Или что еще я должен сделать, чтобы отправить сертификат на сервер?

data, _ := ioutil.ReadFile("/PathTo/certificate.p12")

privateKey, certificate, _ := pkcs12.Decode(data, "abc123")//password=abc123

tlsCertificate := tls.Certificate{
    Certificate: [][]byte{cert.Raw},
    PrivateKey:  privateKey,
    Leaf:        cert,
}
//...
resty.SetCertificates(tlsCertificate)

1 Ответ

1 голос
/ 13 мая 2019

PKCS # 12 (также известный как PFX) кодируется в ASN.1 (абстрактная синтаксическая нотация) и использует DER (отличительные правила кодирования). ASN.1 записывается как TLV (тип, длина и значение). Значение может быть определено или как в вашем случае неопределенным, что просто означает, что длина не указана явно. Многие кодеры и декодеры НЕ поддерживают неопределенную длину. Например, до того, как Windows 10 неопределенных длин не поддерживались крипто-API Microsoft.

Что делать? Есть несколько вариантов: - Преобразуйте PFX (возможно, используя openSSL), чтобы получить PKCS # 12 с определенной длиной - Попробуйте другую библиотеку, чтобы прочитать PKCS # 12, который поддерживает неопределенную длину.

...