簡體   English   中英

將私鑰添加到 X509Certificate

[英]Add Private Key to X509Certificate

我正在處理一些當前使用 OpenSSL.net 為證書簽名請求創建公鑰/私鑰對的代碼。 該請求配備了公鑰並發送到 CA,后者返回簽名證書。 然后將之前創建的私鑰添加到證書中:

myCert.PrivateKey = CryptoKey.FromPrivateKey(rsa.PrivateKeyAsPEM, null);

問題是我需要一個 .net X509Certificate,因為軟件的其余部分使用 SslStream 和其他 .net 類來實現 TLS。

我能夠從 CA 的響應中創建證書,但我沒有找到將私鑰添加到其中的方法。 我還嘗試從 CA 的響應中創建 OpenSSL 證書,將其導出為 DER 或 PEM 並從中創建 .net 證書,但它始終忽略私鑰。

關於如何解決這個問題的任何想法?

我創建了一個小的幫助程序 NuGet 包來創建基於public keyprivate (rsa) keyX509 證書

// Generate with: openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout private.key -out certificate_pub.crt
string certificateText = File.ReadAllText("certificate_pub.crt");
string privateKeyText = File.ReadAllText("private.key");

ICertificateProvider provider = new CertificateFromFileProvider(certificateText, privateKeyText);
X509Certificate2 certificate = provider.Certificate;

// Example: use the PrivateKey from the certificate above for signing a JWT token using Jose.Jwt:
string token = Jose.JWT.Encode(payload, certificate.PrivateKey, JwsAlgorithm.RS256);

有關基於opensslkey 的功能和代碼示例,請參閱NuGetGithub-project

我想也許你在這里錯過了一些概念性的想法?

證書不應包含私鑰。 私鑰始終是私有的,證書是將您的公鑰綁定到您的專有名稱的東西。 換句話說,證書是一份由權威機構簽署的文件,用於確認您與世界共享的特定公鑰屬於您而非其他任何人。 因此它永遠不能包含私鑰,因為您與世界共享您的證書!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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