gpt4 book ai didi

c# - 如何使用商店证书为 NET Core 2.1 正确设置 HTTPS

转载 作者:行者123 更新时间:2023-12-01 22:17:05 24 4
gpt4 key购买 nike

我已经根据 Stackoverflow 上的建议使用 powershell 生成了一个证书:

New-SelfSignedCertificate -Subject "CN=Test Code Signing" -Type CodeSigningCert -KeySpec "Signature" -KeyUsage "DigitalSignature" -FriendlyName "Test Code Signing" -NotAfter (get-date).AddYears(5)

enter image description here

我已将此证书复制并粘贴到受信任的根证书颁发机构中。

我的NET Core WebAPI Program.cs设置如下:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseKestrel(options=> {
options.Listen(IPAddress.Loopback, 5000); // http:localhost:5000
options.Listen(IPAddress.Any, 80); // http:*:80
options.Listen(IPAddress.Loopback, 443, listenOptions =>
{
//how to use a certificate store here?
//listenOptions.UseHttps("certificate.pfx", "password");
//listenOptions.UseHttps(StoreName.My, "Test Code Signing", allowInvalid: true);
listenOptions.UseHttps(StoreName.My, "localhost", allowInvalid: true);

});
});

localhost测试代码签名 在此代码中都不起作用,因为找不到它们。也许我错过了一些东西。试图遵循这个MSDN文档没有运气。

目前 Google Chrome 上显示的证书与我在个人受信任的根证书颁发机构中显示的证书不同:

enter image description here

如何设置 Kestrel 以便选择浏览器信任的自签名证书并避免阻止诸如 NET::ERR_CERT_AUTHORITY_INVALID 之类的消息?

最佳答案

您正在使用的 UseHttps 重载不允许您指定存储位置,因此它默认为 StoreLocation.CurrentUser。您需要调用一个从存储中检索证书并将其传递给 UseHttps 方法的方法。有一篇 MSDN 文章提供了更多详细信息,我已将其包含在底部,但这里有一个示例(您需要将“此处的通用名称”替换为证书通用名称):

    static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel(options =>
{
options.Listen(IPAddress.Any, 443, listenOptions =>
{
listenOptions.UseHttps(GetHttpsCertificateFromStore());
listenOptions.NoDelay = true;
});

})
.Build();
}

private static X509Certificate2 GetHttpsCertificateFromStore()
{
using (var store = new X509Store(StoreName.My, StoreLocation.LocalMachine))
{
store.Open(OpenFlags.ReadOnly);
var certCollection = store.Certificates;
var currentCerts = certCollection.Find(X509FindType.FindBySubjectDistinguishedName, "CN=[your common name here]", false);

if (currentCerts.Count == 0)
{
throw new Exception("Https certificate is not found.");
}

return currentCerts[0];
}
}

https://learn.microsoft.com/bs-latn-ba/azure/service-fabric/service-fabric-tutorial-dotnet-app-enable-https-endpoint

关于c# - 如何使用商店证书为 NET Core 2.1 正确设置 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50898742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com