将 Base-64 pfx 转换为可用的 pkcs#12

问题描述 投票:0回答:2

我已从 API 导出了基本 64 编码证书,现在需要将其转换为 pkcs12 格式才能上传到 Azure。下面的 PowerShell 脚本完美地完成了这项工作,但我在将其转换为 OpenSSL 时遇到了问题。

$base64value = Get-Content -Path $base64FilePath
$byteArray = [System.Convert]::FromBase64String($base64value)
$cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($byteArray, $certPw, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
# Export the certificate as a PFX file
$bytesPfx = $cert.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pfx, $certPw)
[System.IO.File]::WriteAllBytes($pkcs12FilePath, $bytesPfx)

我尝试了以下 2 个 OpenSSL 命令...

openssl base64 -d -a -in [base64.pfx] -out [converted.pfx]
openssl enc -base64 -d -in [base64.pfx] -out [converted.pfx]

...但是当我尝试使用证书时,它们都会返回相同的错误:

34359836736:错误:0D07207B:asn1编码例程:ASN1_get_object:标头太长:crypto / asn1 / asn1_lib.c:101: pkcs12 出错

任何有关此转换的帮助将不胜感激。预先感谢!

azure powershell openssl ssl-certificate
2个回答
0
投票

您必须使用

-A
(大写) 参数而不是
-a

根据 OpenSSL 的文档,他们的 base64 解码器默认限制为 76 个字符。因此 pkcs12 二进制文件的预期输出实际上被截断为该限制。这就是您收到

header too long
错误的原因,因为文件生成已损坏。

文档建议您可以使用

-A
选项来克服此限制。

最终命令是:

openssl base64 -d -A -in certificate.b64 -out certificate.pfx

奖励,如果您想将其进一步转换为 PEM 文件:

openssl pkcs12 -in certificate.pfx -out certificate.pem -nodes

如果您只需要客户端证书,还可以包含

-clcerts
选项。


-1
投票

你可以尝试以下方法

将 pfx 从 base64 openssl 二进制格式转换

openssl enc -base64 -d -in base64.pfx -out converted.pfx

然后将其转换为 pkcs12 :

openssl pkcs12 -in converted.pfx -out bundle.pem -clcerts -nodes
© www.soinside.com 2019 - 2024. All rights reserved.