簡體   English   中英

.net 核心獲取證書私鑰以使用 GRPC

[英].net core get certificate private key to work with GRPC

我創建了一個自簽名證書。 后來我創建了一個需要證書和密鑰文件的谷歌 GRPC 服務器。 我嘗試從加載的 .net 證書中獲取信息。 我獲得了證書,但密鑰文件有問題。 我沒有從存儲的證書中獲得正確的密鑰格式。

那只是一個鏡頭的例子。 通常我想將證書存儲在 .net 證書存儲中,當創建 grpc 服務 ic 時,我想從存儲中讀取證書和密鑰。 有了它,我將實例化服務。

證書創建:

 openssl req -newkey rsa:4096 -x509 -sha256 -days 3650 -nodes -out myCert.crt -keyout myCert.key -config cert.conf
 openssl pkcs12 -export -in myCert.crt -inkey myCert.key -out myCert.pfx -passin pass: -passout pass:

然后我將證書加載為 .net 證書(通常我會從商店獲取):

var cert = new X509Certificate2("myCert.pfx", "", X509KeyStorageFlags.Exportable);
// some stringbuild before to add -----BEGIN PRIVATE KEY-----
var privateKeyFromDotNetCert = Convert.ToBase64String(x509Certificate2.GetRSAPrivateKey().ExportRSAPrivateKey());
// for reference read the original key..only to shwo the problem
var serverkey = File.ReadAllText("myCert.key");

privateKeyFromDotNetCert 與原始服務器密鑰不同。

后來我嘗試

  var keypair = new KeyCertificatePair(cacert, serverkey);
  var sslCredentials = new SslServerCredentials(new List<KeyCertificatePair> { keypair }, cacert, false);

使用 serverKey 它可以正常工作,但不能使用從 .net 證書中提取的密鑰。 是否可以從 .net 證書中獲取正確的密鑰?

從 .net 證書創建證書

我嘗試了第一個答案:

  StringBuilder builder = new StringBuilder();
  builder.Append("-----BEGIN PRIVATE KEY-----");
  builder.AppendLine(Convert.ToBase64String(certificate.GetRSAPrivateKey().ExportPkcs8PrivateKey(),Base64FormattingOptions.InsertLineBreaks));
  builder.Append("-----END PRIVATE KEY-----");

  privateKeyFromDotNetCert = builder.ToString();

這行得通。 privateKeyFromDotNetCert 不等於 serverkey。 但從 grpc 服務接受。

您的評論說您要添加-----BEGIN PRIVATE KEY----- (並且可能會添加-----END PRIVATE KEY----- ),但是您選擇的導出方法 (ExportRSAPrivateKey) 沒有t 匹配該格式。 嘗試ExportPkcs8PrivateKey ,它以 PKCS#8 PrivateKeyInfo 格式導出,與-----BEGIN PRIVATE KEY----- header 匹配。 (ExportRSAPrivateKey 生成一個 PKCS#1 RSAPrivateKey,即-----BEGIN RSA PRIVATE KEY----- 。)

您可能還想使用Base64FormattingOptions.InsertLineBreaks選項。

暫無
暫無

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

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