簡體   English   中英

如何直接在Kestrel中使用PEM證書?

[英]How to use PEM certificate in Kestrel directly?

我想在我的 ASP.Net Core 2.0(使用 Kestrel web 服務器)應用程序中使用 HTTPS。

官方文檔使用 pfx 格式,但我想直接使用PEM格式(由 Let's encrypt 生成)而不進行任何轉換(至少在我的 C# 代碼之外沒有任何轉換)。 有可能嗎?

簡短的回答是你不能。 至少,你不能沒有大量的工作或使用像 Bouncy Castle 這樣的東西。

當證書和密鑰一起放入 PFX 時,X509Certificate2 對象將具有cert.HasPrivateKey == true ,並且能夠通過Get[Algorithm]PrivateKey擴展方法系列使用私鑰。 當您加載 PEM 證書時,僅加載公共證書部分(如果它是一個帶有 PEM 密鑰的 PEM 證書?那仍然只是一個 PEM 證書)。

獲取與證書關聯的私鑰的簡單方法是使用新的(在 .NET Core 2.0 中) certWithKey = cert.CopyWithPrivateKey(key)擴展方法系列。 所以現在你“只”需要加載私鑰。 .NET 當前無法加載(或保存)“.key”文件(無論它們的擴展名是什么)。 如果您想嘗試加載一個,您可能需要檢查一些現有技術:

好消息是 .NET 計划在未來支持加載密鑰( https://github.com/dotnet/corefx/issues/20414 ),但由於它還沒有完成(更不用說發布了)現在不能幫你。

對於那些發現這個並使用 dotnet 5+ 的人

var pem = File.ReadAllText("path/to/my.pem");
var key = X509Certificate2.CreateFromPem(pem);

也許還可以看看https://www.scottbrady91.com/c-sharp/pem-loading-in-dotnet-core-and-dotnet

ASP.NET 5 引入了用於為默認證書配置 PEM crt/key 的應用程序設置:

{
  "Kestrel": {
    "Certificates": {
      "Default": {
        "Path": "<path to .pem/.crt file>",
        "KeyPath": "<path to .key file>",
        "Password": "$CREDENTIAL_PLACEHOLDER$"
      }
    }
  }
}

請注意,路徑是相對於您的 bin 目錄的,但也可以是絕對路徑。 它們不支持環境變量或 ~。

https://learn.microsoft.com/en-us/as.net/core/fundamentals/servers/kestrel/endpoints?view=as.netcore-7.0#replace-the-default-certificate-from-configuration

暫無
暫無

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

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