将base64字符串转换为X509证书

问题描述 投票:1回答:1

有人可以帮我解决以下问题。我使用PowerShell,到目前为止,我已经想出了如何获取X509证书平面文件,例如Cert.cer并将其标记为Base64字符串以进行存储(例如,在数据库中作为字符串等),然后将其再次转换回System.Security.Cryptography.X509Certificates.X509Certificate2对象

到目前为止看到我的代码

$CertifcateFileFullPath = "C:\temp\cert.cer"
$Cert = new-object security.cryptography.x509certificates.x509certificate2 -ArgumentList $CertifcateFileFullPath

$Obj2 = [System.Convert]::ToBase64String($Cert.RawData)

$Obj3 = [System.Security.Cryptography.X509Certificates.X509Certificate2]([System.Convert]::FromBase64String($Obj2))

现在问题是我想将对象$ obj3作为平面文件(例如Cert.cer)写回文件系统,该文件可读/可用作原始证书。如果我使用| out-file C:\ Temp2 \ Cert.cer等...我得到一个比原始文件大得多且不可读的文件(例如,不作为普通的证书文件打开)。我假设编码是将对象写入文件系统时的问题(我相信证书文件是ASN 1编码二进制文件)

请有人帮我实现这一目标,提前谢谢。

并且布兰特

powershell base64 x509
1个回答
0
投票

问题是PewrShell默认是Unicode,而CryptoAPI解码器需要ASCII编码(其中每个字符使用一个字节编码)。要实现此目的,请将-Encoding ASCII参数添加到Out-File cmdlet。

顺便说一句,没有必要以二进制格式存储证书文件。 CryptoAPI支持Base64格式的证书文件。由于.NET依赖于CryptoAPI,因此不存在可兼容性问题。

© www.soinside.com 2019 - 2024. All rights reserved.