问题 running/configure 自托管控制台应用程序(ASP.net 核心 2.1,Kestrel)在 windows 网络服务器上具有 public 证书
Problems running/configure self hosted console application (ASP.net core 2.1, Kestrel) with public certificate on a windows webserver
我过去使用 https 开发了各种网络服务(VB ASP.net web-api 应用程序)。
我已经使用 http 完成了开发,然后在生产服务器上设置了 https。
要在生产服务器上为 https 和证书设置一个端口,我有:
- 在证书库中导入了一个public证书
windows 服务器使用 netsh 为 https 配置了特定端口。
例如:
netsh http add urlacl url=https://+:22224/ user=everyone
- 将证书(通过指纹)绑定到端口。例如:
netsh http add sslcert ipport=0.0.0.0:22224
certhash=31cf73308a768100d4d32fe6e77638593e68ab57
appid={a33a711f-c587-44e5-96bc-dca8a7f3fc3c}
- 设置应用程序以监听特定端口,据此我有
在启动时从配置文件中读取 url - 例如https://IP:Port 并应用
它到 (vb.net) HttpSelfHostConfiguration()
这没有问题,我可以根据需要配置应用程序(例如,在配置文件中为 http 配置一个端口,以便在内联网服务器上进行测试,在配置文件中为生产配置另一个端口使用 https 的环境)。
现在,我想对 asp.net 核心 2.1.6 应用程序执行相同的操作,但 它似乎无法以相同的方式工作。
Public 证书 (comodo) 安装在 windows 网络服务器的证书库中。
端口 22224 为 https 配置了 netsh。
证书绑定到带有 netsh 的端口(使用 netsh http show sslcert ipport=0.0.0.0:22224
显示证书是正确的
在 Program.cs 中,我添加了使用 UseUrls 监听的端口:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>() //;
.UseUrls(GV.cURL, "http://localhost:5000");
}
因此 GV.curl 在 运行 时间
包含 https://IP:22224
如果我将应用程序 运行 配置为 http 端口(例如 http://IP:22222),则应用程序 运行 没问题(通过 Internet)。
如果我设置(配置的)https 端口 (https://IP:22224),应用程序不会启动并发出错误消息:
无法配置 HTTPS 终结点。 未指定服务器证书,并且找不到默认的开发人员证书。
我在网上找到的信息令人困惑,而且这个主题似乎是一个“移动目标”(经常更改 asp.net 核心 x-x 的基本处理)。
我目前的发现:
错误消息中截断的“未指定服务器证书”表明,必须在应用程序中配置证书 ?
我找到了一个示例,用于在 CreateWebHostBuilder 中使用 .useKestrel 选项指定证书:
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, 5000);
options.Listen(IPAddress.Loopback, 5001, listenOptions =>
{
listenOptions.UseHttps("certificate.pfx", "topsecret");
});
注意:在我的例子中,我必须将 5001 更改为 22224。
问题:
我真的要配置吗(已经绑定端口了)public
证书也在asp.net core 2.1 application?
如果是,最好的方法是什么(上面的例子是个好方法)?
经过多次尝试和错误,我找到了适合我的相关信息。
注意:我现在使用 ASP.net 核心 2.1.6(如果您使用旧版本,这可能不适合您...
您不需要使用netsh进行任何配置,但您必须配置证书(包括密码)。
您还不需要更改 program.cs...
这些配置完全可以在 appsettings.json 中完成(包含在项目根目录中)
所以...在项目中(在我的机器上调试),我使用默认的appsettings.json(使用http):
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
在intranet服务器上,我使用另一个appsettings.json(仍然是http):
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
,
"Kestrel": {
"EndPoints": {
"Http1": { "Url": "http://localhost:5000" },
"Http2": { "Url": "http://172.16.1.120:22222" }
}
}
}
这样就可以通过内网服务器的IP地址在局域网中测试应用程序,也可以直接在内网服务器上(localhost端口5000)进行测试。
在 internet 服务器上,我使用另一个 appsettings.json(对于带 http 的本地主机,对于带 https 和 certficate[=56 的服务器 IP =]):
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
,
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://localhost:5000"
},
"HttpsInlineCertFile": {
"Url": "https://192.168.3.3:22224",
"Certificate": {
"Path": "./certificate.pfx",
"Password": "NotReally",
"AllowInvalid": "true"
}
}
}
}
}
这样,应用程序可以直接在内网服务器上用http测试,在互联网上用https和cert测试。
处理:
- 在服务器上,我有一个应用程序的根目录。
- 直接在根目录下,我存储了"per machine"个不同文件的副本(包括appsettings.json)
- 为了发布新版本,我在我的开发机器上发布,然后将 \publish\ 目录复制到服务器(在根目录下)并覆盖存储的文件。
- 为了获得正确的配置,我创建了一个简单的 .cmd,它从我 运行 全新发布后...
https和证书注意事项:
- 证书必须存储在\publish\ 文件夹中。
- 由于(我的)public contoso 证书确实保护了一些域,只有在通过域调用应用程序时,https 才能正常工作(否则,会显示“不安全”消息) .
- 为了能够使用 https 测试应用程序,我在 windows- 和“真正的”防火墙上打开了端口 22224。
- DNS 指向我们互联网服务器的 public IP。
为了测试,我用 https://www.Domain.xx:22224 调用应用程序
而且...它有效...
我正在为我的 ASP.Net Core App v2.2 使用 Dockerized 部署,并使用以下指南使其工作(这个 should work as of v2.1, Jan. 2017):
这个 Whosebug 问题:
This is a useful article 通过证书创建、在不同机器上信任它并配置 .Net 项目 (v2.0)。
我基本上做的是:
- 将证书(在此示例中用于 localhost 开发)存储在证书文件夹中:
- appsettings.json:
"Kestrel": {
"applicationUrl": "https://localhost:5051;http://localhost:5050",
"Certificates": {
"Default": {
"Path": "certificates/localhost.pfx",
"Password": "MySecret",
"AllowInvalid": "true"
}
}
}
- 设置应用程序 URL
- 通过launchsettings.json(仅限本地开发)
"kamapp-backend": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5051;http://localhost:5050",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
通过环境 ASPNETCORE_URLS="http://+:5050;https://+:5051"
,例如。 ASPNETCORE_URLS="http://+:5050;https://+:5051" dotnet run
- 您无需编写任何设置代码,只需使用配置文件即可。
强制使用 HTTPS:
app.UseHsts();
在你的 Startup.cs
它似乎在没有 "AllowInvalid": "true"
的情况下也能正常工作,但我还不明白为什么。也许有人可以回答。
我使用下面的开发环境appsettings.json
这里我没有用https,我用的是http。
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"Kestrel": {
"EndPoints": {
"http": { "Url": "http://localhost:5000" }
}
}
}
我只解决了这个问题 运行 cmd 中的两个推荐
- 运行命令
- 输入好评
dotnet dev-certs https --clean
- 最后输入命令
dotnet dev-certs https -t
- 收到消息"The HTTPS developer certificate was generated successfully."
- 运行.net 核心项目
我过去使用 https 开发了各种网络服务(VB ASP.net web-api 应用程序)。 我已经使用 http 完成了开发,然后在生产服务器上设置了 https。 要在生产服务器上为 https 和证书设置一个端口,我有:
- 在证书库中导入了一个public证书 windows 服务器使用 netsh 为 https 配置了特定端口。 例如:
netsh http add urlacl url=https://+:22224/ user=everyone
- 将证书(通过指纹)绑定到端口。例如:
netsh http add sslcert ipport=0.0.0.0:22224 certhash=31cf73308a768100d4d32fe6e77638593e68ab57 appid={a33a711f-c587-44e5-96bc-dca8a7f3fc3c}
- 设置应用程序以监听特定端口,据此我有 在启动时从配置文件中读取 url - 例如https://IP:Port 并应用 它到 (vb.net) HttpSelfHostConfiguration()
这没有问题,我可以根据需要配置应用程序(例如,在配置文件中为 http 配置一个端口,以便在内联网服务器上进行测试,在配置文件中为生产配置另一个端口使用 https 的环境)。
现在,我想对 asp.net 核心 2.1.6 应用程序执行相同的操作,但 它似乎无法以相同的方式工作。
Public 证书 (comodo) 安装在 windows 网络服务器的证书库中。
端口 22224 为 https 配置了 netsh。
证书绑定到带有 netsh 的端口(使用 netsh http show sslcert ipport=0.0.0.0:22224
显示证书是正确的
在 Program.cs 中,我添加了使用 UseUrls 监听的端口:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>() //;
.UseUrls(GV.cURL, "http://localhost:5000");
}
因此 GV.curl 在 运行 时间
包含 https://IP:22224如果我将应用程序 运行 配置为 http 端口(例如 http://IP:22222),则应用程序 运行 没问题(通过 Internet)。
如果我设置(配置的)https 端口 (https://IP:22224),应用程序不会启动并发出错误消息:
无法配置 HTTPS 终结点。 未指定服务器证书,并且找不到默认的开发人员证书。
我在网上找到的信息令人困惑,而且这个主题似乎是一个“移动目标”(经常更改 asp.net 核心 x-x 的基本处理)。
我目前的发现:
错误消息中截断的“未指定服务器证书”表明,必须在应用程序中配置证书 ?
我找到了一个示例,用于在 CreateWebHostBuilder 中使用 .useKestrel 选项指定证书:
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, 5000);
options.Listen(IPAddress.Loopback, 5001, listenOptions =>
{
listenOptions.UseHttps("certificate.pfx", "topsecret");
});
注意:在我的例子中,我必须将 5001 更改为 22224。
问题:
我真的要配置吗(已经绑定端口了)public 证书也在asp.net core 2.1 application?
如果是,最好的方法是什么(上面的例子是个好方法)?
经过多次尝试和错误,我找到了适合我的相关信息。
注意:我现在使用 ASP.net 核心 2.1.6(如果您使用旧版本,这可能不适合您...
您不需要使用netsh进行任何配置,但您必须配置证书(包括密码)。
您还不需要更改 program.cs...
这些配置完全可以在 appsettings.json 中完成(包含在项目根目录中)
所以...在项目中(在我的机器上调试),我使用默认的appsettings.json(使用http):
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
在intranet服务器上,我使用另一个appsettings.json(仍然是http):
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
,
"Kestrel": {
"EndPoints": {
"Http1": { "Url": "http://localhost:5000" },
"Http2": { "Url": "http://172.16.1.120:22222" }
}
}
}
这样就可以通过内网服务器的IP地址在局域网中测试应用程序,也可以直接在内网服务器上(localhost端口5000)进行测试。
在 internet 服务器上,我使用另一个 appsettings.json(对于带 http 的本地主机,对于带 https 和 certficate[=56 的服务器 IP =]):
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
,
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://localhost:5000"
},
"HttpsInlineCertFile": {
"Url": "https://192.168.3.3:22224",
"Certificate": {
"Path": "./certificate.pfx",
"Password": "NotReally",
"AllowInvalid": "true"
}
}
}
}
}
这样,应用程序可以直接在内网服务器上用http测试,在互联网上用https和cert测试。
处理:
- 在服务器上,我有一个应用程序的根目录。
- 直接在根目录下,我存储了"per machine"个不同文件的副本(包括appsettings.json)
- 为了发布新版本,我在我的开发机器上发布,然后将 \publish\ 目录复制到服务器(在根目录下)并覆盖存储的文件。
- 为了获得正确的配置,我创建了一个简单的 .cmd,它从我 运行 全新发布后...
https和证书注意事项:
- 证书必须存储在\publish\ 文件夹中。
- 由于(我的)public contoso 证书确实保护了一些域,只有在通过域调用应用程序时,https 才能正常工作(否则,会显示“不安全”消息) .
- 为了能够使用 https 测试应用程序,我在 windows- 和“真正的”防火墙上打开了端口 22224。
- DNS 指向我们互联网服务器的 public IP。
为了测试,我用 https://www.Domain.xx:22224 调用应用程序
而且...它有效...
我正在为我的 ASP.Net Core App v2.2 使用 Dockerized 部署,并使用以下指南使其工作(这个 should work as of v2.1, Jan. 2017):
这个 Whosebug 问题:
This is a useful article 通过证书创建、在不同机器上信任它并配置 .Net 项目 (v2.0)。
我基本上做的是:
- 将证书(在此示例中用于 localhost 开发)存储在证书文件夹中:
- appsettings.json:
"Kestrel": {
"applicationUrl": "https://localhost:5051;http://localhost:5050",
"Certificates": {
"Default": {
"Path": "certificates/localhost.pfx",
"Password": "MySecret",
"AllowInvalid": "true"
}
}
}
- 设置应用程序 URL
- 通过launchsettings.json(仅限本地开发)
"kamapp-backend": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5051;http://localhost:5050",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
通过环境
ASPNETCORE_URLS="http://+:5050;https://+:5051"
,例如。ASPNETCORE_URLS="http://+:5050;https://+:5051" dotnet run
- 您无需编写任何设置代码,只需使用配置文件即可。
强制使用 HTTPS:
app.UseHsts();
在你的 Startup.cs
它似乎在没有 "AllowInvalid": "true"
的情况下也能正常工作,但我还不明白为什么。也许有人可以回答。
我使用下面的开发环境appsettings.json
这里我没有用https,我用的是http。
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"Kestrel": {
"EndPoints": {
"http": { "Url": "http://localhost:5000" }
}
}
}
我只解决了这个问题 运行 cmd 中的两个推荐
- 运行命令
- 输入好评
dotnet dev-certs https --clean
- 最后输入命令
dotnet dev-certs https -t
- 收到消息"The HTTPS developer certificate was generated successfully."
- 运行.net 核心项目