簡體   English   中英

證書的私鑰是否導出為其他值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM