将base64字符串转换为X509 certifcate

时间:2015-05-14 12:23:25

标签: powershell base64 x509

有人可以帮我解决以下问题。 我使用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编码二进制文件)

有人可以帮助我实现这一目标,提前谢谢。

E Brant

1 个答案:

答案 0 :(得分:0)

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

BTW,无需以二进制格式存储证书文件。 CryptoAPI支持Base64格式的证书文件。由于.NET依赖于CryptoAPI,因此不存在可兼容性问题。