use*_*567 5 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))
Run Code Online (Sandbox Code Playgroud)
现在的问题是我想将对象$obj3作为平面文件(例如 Cert.cer)写回文件系统,该文件可以作为原始证书读取/使用。
如果我使用 | out-file C:\Temp2\Cert.cer 等...我得到一个比原始文件大得多且不可读的文件(例如,不能作为普通证书文件打开)。我认为将对象写入文件系统时编码是问题(我相信证书文件是 ASN 1 编码二进制文件)
问题是 PewrShell 默认是 Unicode,而 CryptoAPI 解码器需要 ASCII 编码(其中每个字符使用一个字节进行编码)。要实现此目的,请将-Encoding ASCII参数添加到Out-Filecmdlet。
顺便说一句,不需要以二进制格式存储证书文件。CryptoAPI 支持 Base64 格式的证书文件。由于.NET依赖于CryptoAPI,因此不会出现兼容性问题。
| 归档时间: |
|
| 查看次数: |
14984 次 |
| 最近记录: |