[英]Certificate's private key is exported as a different value?
我已經創建了一個自簽名證書( pfx
)以進行測試。
我可以通過以下方式導出ist公鑰:
X509Certificate2 cer = new X509Certificate2();
X509Store store = new X509Store(StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var certificateCollection = store.Certificates.Find(...);
var cert = certificateCollection[0] ;
Console.WriteLine(Convert.ToBase64String(cert.Export( X509ContentType.Cert ), Base64FormattingOptions.InsertLineBreaks));
結果:
MIIDFTCCAf2gAw...........eFUpBB9C0/UNRmD7EAg==
這與openssl
命令一致:
$ openssl pkcs12 -in domain.name.pfx -clcerts -nokeys -out domain.name.crt
結果:
-----BEGIN CERTIFICATE-----
MIIDFTCCAf2gAw........9C0/UNRmD7EAg==
-----END CERTIFICATE-----
但是,當我通過C#導出私鑰時:
Convert.ToBase64String(cert.Export( X509ContentType.Pfx ), Base64FormattingOptions.InsertLineBreaks)
我得到:
MIIDFTCCAf2gAw............OVeFUpBB9C0/UNRmD7EAg==
當使用openssl
命令時:
$ openssl pkcs12 -in domain.name.pfx -nocerts -nodes -out domain.name.key
我得到:
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w.........6HNjF2h7uuFdvbH2VAVg=
-----END PRIVATE KEY-----
題:
為什么在私鑰中得到不同的結果? 以及如何解決C#代碼以產生與openssl相同的結果?
(注意-我不是在談論-----begin/end keys-----
boundries,而是實際值。
附加信息, PFX文件
為什么在私鑰中得到不同的結果?
您正在嘗試做兩件事。 通過openssl,您正在使用包含私鑰和證書的pfx文件。 在C#中,您使用帶有私鑰的證書表示形式,並且正在導出到pfx文件!
以及如何解決C#代碼以產生與openssl相同的結果?
C#沒有友好的功能,只能從X509Certificate2導出私鑰(以類似opensl的方式)。 正如@ darksquirell42在評論中提到的,您可以使用X509Certificate2.PrivateKey
屬性,然后將其ToXmlString(true)
為RSACryptoServiceProvider
並執行ToXmlString(true)
。 但這將為您提供xml結構中的私鑰參數。 然后,您將必須采用每個參數並構造一個ASN.1結構PKCS#1或(更好的IMHO) PKCS#8 。 但是C#默認沒有友好的方法來處理ASN.1對象。
或者,您可以像BouncyCastle一樣使用某些加密庫為您完成此任務。 BouncyCastle的這種方法可能會有所幫助。
X509ContentType.Cert
表示形式相同,因為證書是靜態結構。 如果將其導出為循環,則始終會得到相同的答案。
X509ContentType.Pfx
表示形式有所不同,因為PFX結構中存在隨機鹽。 每個證書一個,每個私鑰一個,最后一個。 如果您在循環中將相同的公共/專用對作為PFX導出,則每次都會不同(288位隨機數據)。
base64數據的末尾有所不同,因為它包含最后一個鹽和其余數據(包括加密的證書鹽和加密的密鑰鹽)上的MAC。 它還包含一個整數工作因子,Windows將其選擇為2000,OpenSSL將其選擇為2048; 進一步區分OpenSSL和Windows導出。
因此,您所看到的是設計使然。 如果您需要穩定的出口,則必須做其他事情。 如果您只是擔心它們的不同,那幾乎可以肯定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.