[英]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 目錄的,但也可以是絕對路徑。 它們不支持環境變量或 ~。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.