2015-05-14 282 views
1

有人可以請幫我解決以下問題。 我使用PowerShell,到目前爲止,我已經想出瞭如何獲取X509證書平面文件,例如Cert.cer和音樂會它到一個Base64字符串的存儲(例如在數據庫中作爲一個字符串等),然後再將其轉換回System.Security.Cryptography.X509Certificates.X509Certificate2對象將base64字符串轉換爲X509 certifcate

請看我的代碼如下遠

$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)) 

現在的事情是我想寫的對象$ OBJ 3迴文件系統作爲平面文件(如Cert.cer),這是可讀/可作爲原始憑證。如果我使用| out-file C:\ Temp2 \ Cert.cer等等...我得到的文件比原始文件大得多,不可讀(例如,不能像普通的證書文件那樣打開)。我認爲編碼是寫出對象到文件系統時的問題(我相信證書文件是ASN 1編碼二進制文件)

有人可以幫助我實現這一點,請提前致謝。

Ë布蘭特

+0

上面的代碼沒有出來過好讓我嘗試粘貼再次$ CertifcateFileFullPath =「C:\ TEMP \ cert.cer」 $證書=新對象security.cryptography.x509certificates.x509certificate2 -ArgumentList $ CertifcateFileFullPath $ OBJ2 = [System.Convert] :: ToBase64String($ Cert.RawData) $ OBJ3 = [System.Security.Cryptography.X509Certificates.X509Certificate2]([System.Convert] :: FromBase64String($ OBJ2)) – user2971567

回答

0

的問題是,PewrShell是Unicode默認,而解碼器的CryptoAPI預計ASCII編碼(其中每個字符使用一個字節編碼)。要實現此目的,請將-Encoding ASCII參數添加到Out-File cmdlet。

順便說一句,沒有必要以二進制格式存儲證書文件。 CryptoAPI支持Base64格式的證書文件。由於.NET依賴於CryptoAPI,所以不存在可互換性問題。

+0

非常感謝Vadims :) – user2971567

相關問題