gpt4 book ai didi

asp.net - 如何使用自托管 ASP.NET Core 2 应用程序 (httpsys) 进行 HTTPS (SSL)

转载 作者:可可西里 更新时间:2023-11-01 12:41:59 26 4
gpt4 key购买 nike

我写了一个小的 ASP.NET Core 2 应用程序。它作为服务运行,因此没有 IIS。它在装有 Windows 7 SP1 的 PC 上运行。

var host = WebHost.CreateDefaultBuilder(args)
.UseContentRoot(pathToContentRoot)
.UseHttpSys(options =>
{
options.Authentication.Schemes = AuthenticationSchemes.None;
options.Authentication.AllowAnonymous = true;
options.MaxConnections = null;
options.MaxRequestBodySize = 30000000;
options.UrlPrefixes.Add("http://*:5050");
})
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();

if (isService)
{
host.RunAsService();
}
else
{
host.Run();
}

如您所见,我想在端口 5050 上监听。没有 SSL 也能正常工作。

我的问题是,如何为我的应用程序启用 https?同样:没有 IIS,没有域名(没有互联网连接)。通信只是在内部网络内部,所以我想使用自签名证书。

我阅读了文档(HTTP.sys documentation ; Netsh Commands ; New-SelfSignedCertificate ),但总有一些与我的情况不同的地方(他们使用 Krestel,或者它是为了使用 IIS)。另外,我不知道如何为我的应用程序获取 App-ID(netsh 需要)。我试过这个:StackOverflow Get GUID但它不起作用。

var assembly = typeof(Program).Assembly;

// following line produces: System.IndexOutOfRangeException
var attribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute), true)[0];

var id = attribute.Value;
Console.WriteLine(id);

所以我对所有的可能性和不同的配置有点困惑。而且文档没有考虑我的具体案例。

我创建了一个证书,我想我需要将它存储在“我的”商店中。 (那在哪里?cert:\LocalMachine\My)然后我需要将我的应用程序 ID 和端口分配给它。

但我不知道该怎么做。谁能帮忙?

最佳答案

所以我通过以下方式解决了这个问题:

首先,如果你想知道你自己的GUID,你会用下面的代码得到它:

var id = typeof(RuntimeEnvironment).GetTypeInfo().Assembly.GetCustomAttribute<GuidAttribute>().Value;

创建自签名证书

现在创建一个 SelfSigned-Certificate(如果您已经拥有或购买了一个,请跳过此步骤)

  1. 运行以下 OpenSSL 命令以生成您的私钥和公共(public)证书。回答问题并在出现提示时输入通用名称。

openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem

  1. 将您的 key 和证书合并到一个 PKCS#12 (P12) 包中:

openssl pkcs12 -inkey key.pem -in certificate.pem -export -out certificate.p12

在客户端安装证书:

对于 Windows 8 及更高版本:

使用 PowerShell 将证书添加到 Windows 证书存储区

PS C:> $certpwd = ConvertTo-SecureString -String "passwort" -Force –AsPlainText

PS C:> Import-PfxCertificate –FilePath D:\data\cert\certificate.p12 cert:\localMachine\my -Password $certpwd

获取证书的指纹(哈希)

PS C:\WINDOWS\system32> dir Cert:\LocalMachine\my

安装证书(用您的值替换哈希、IP 和端口)

PS C:\WINDOWS\system32> $guid = [guid]::NewGuid()

PS C:\WINDOWS\system32> $certHash = "A1D...B672E"

PS C:\WINDOWS\system32> $ip = "0.0.0.0"

PS C:\WINDOWS\system32> $port = "5050"

PS C:\WINDOWS\system32> "http add sslcert ipport=$($ip):$port certhash=$certHash appid={$guid}" | netsh

你已经完成了。

适用于 Windows 7

将证书添加到 Windows 证书存储(注意:此操作使用 .pem 文件,因为 certutil 似乎不支持 .p12 文件)

.\certutil.exe -addstore -enterprise -f "Root" C:\lwe\cert\certificate.pem

如果他的行抛出如下错误:

SSL Certificate add failed, Error 1312 A specified logon session does not exist. It may already have been terminated.

您必须手动执行这些步骤(手动执行时请插入 .p12 文件,而不是 .pem):

运行mmc.exe

  • 转到文件 -> 添加/删除管理单元

  • 选择证书管理单元。

  • 选择计算机帐户

  • 导航至:证书(本地计算机)\个人\证书

  • 右键单击“证书”文件夹并选择“所有任务”->“导入”。

  • 按照向导说明选择证书。请务必在向导期间选中导出复选框。

要获取您的证书的哈希值,请运行 Internet Explorer,按 Alt + X 并转到 Internet 选项 -> 内容 -> 证书。搜索您的证书并读取哈希。

现在您可以运行与 Windows 8+ 相同的命令:

安装证书(用您的值替换哈希、IP 和端口)

PS C:\WINDOWS\system32> $guid = [guid]::NewGuid()

PS C:\WINDOWS\system32> $certHash = "A1D...B672E"

PS C:\WINDOWS\system32> $ip = "0.0.0.0"

PS C:\WINDOWS\system32> $port = "5050"

PS C:\WINDOWS\system32> "http add sslcert ipport=$($ip):$port certhash=$certHash appid={$guid}" | netsh

编辑您的代码

毕竟,您必须将 UrlPrefixes 设置为 https。因此,在您的 Program.cs 文件中,您需要:

var host = WebHost.CreateDefaultBuilder(args)
.UseContentRoot(pathToContentRoot)
.UseHttpSys(options =>
{
options.Authentication.Schemes = AuthenticationSchemes.None;
options.Authentication.AllowAnonymous = true;
options.MaxConnections = null;
options.MaxRequestBodySize = 30000000;
options.UrlPrefixes.Add("https://*:5050");
})
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();

关于asp.net - 如何使用自托管 ASP.NET Core 2 应用程序 (httpsys) 进行 HTTPS (SSL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51823878/

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