azure 将Base-64 pfx转换为Usable pkcs#12

mzillmmw  于 2023-08-07  发布在  其他
关注(0)|答案(2)|浏览(97)

我已经从API导出了一个base 64编码的证书,现在需要将其转换为pkcs 12格式以上传到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)

字符串
我已经尝试了以下两个OpenSSL命令...

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

的数据
...但是当我尝试使用证书时,这两个都返回相同的错误:
34359836736:错误:0 D 07207 B:asn 1编码例程:ASN1_get_object:标头太长:crypto/asn1/asn1_lib.c:101:pkcs 12错误
任何与此转换的帮助将不胜感激。提前感谢!

sq1bmfud

sq1bmfud1#

您必须使用-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选项。

qf9go6mv

qf9go6mv2#

你可以试试下面的
从base64 openssl二进制格式转换pfx

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

字符串
然后将其转换为pkcs12:

openssl pkcs12 -in converted.pfx -out bundle.pem -clcerts -nodes

相关问题