Https 在windows Web服务器上使用公共证书运行/配置自托管控制台应用程序(ASP.net core 2.1,Kestrel)时出现问题
过去,我使用https开发了各种web服务(VB ASP.net web api应用程序)用于生产。 我使用http进行了开发,然后在生产服务器上设置了https。 要在生产服务器上为https和证书设置端口,我有:Https 在windows Web服务器上使用公共证书运行/配置自托管控制台应用程序(ASP.net core 2.1,Kestrel)时出现问题,https,asp.net-core-mvc,certificate,asp.net-core-2.1,kestrel-http-server,Https,Asp.net Core Mvc,Certificate,Asp.net Core 2.1,Kestrel Http Server,过去,我使用https开发了各种web服务(VB ASP.net web api应用程序)用于生产。 我使用http进行了开发,然后在生产服务器上设置了https。 要在生产服务器上为https和证书设置端口,我有: 已在上的证书存储中导入公共证书 windows server使用netsh为https配置了特定端口。 例如: netsh http add urlacl url=user=everybody 将证书(通过指纹)绑定到端口。例如: netsh http add sslcert ip
公共证书(comodo)安装在windows web服务器的证书存储中。
端口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");
}
注意:在我的情况下,我必须将5001更改为22224
问题:
- 我真的必须配置(已绑定到端口的)公共端口吗 asp.net core 2.1应用程序中也有证书?
- 如果是,最好的方法是什么(上面的例子是一个好方法)?
注意:我现在使用ASP.net core 2.1.6(如果您使用的是较旧的版本,这可能不适合您 您不需要使用netsh进行任何配置,但必须配置证书(包括密码)。
您无需进一步更改程序。cs…
这些配置可以在appsettings.json(包含在项目根目录中)中完全完成。
因此…在项目(在我的机器上调试)中,我使用默认的appsettings.json(使用http): 在intranet服务器上,我使用另一个appsettings.json(仍然使用http): 这样,应用程序可以通过内部网服务器的IP地址在LAN中进行测试,也可以直接在内部网服务器(localhost端口5000)上进行测试 在internet服务器上,我使用另一个appsettings.json(对于带有http的本地主机,对于带有https和证书的服务器IP): 通过这种方式,应用程序可以直接在内联网服务器上使用http进行测试,并通过互联网使用https和cert进行测试 处理:
- 在服务器上,我有一个应用程序的根目录
- 我直接在根目录下存储了“每台机器”不同文件的副本(包括appsettings.json)
- 要发布新版本,我在我的dev机器上发布,然后将\publish\目录复制到服务器(根目录下),并覆盖存储的文件
- 为了获得正确的配置,我创建了一个简单的.cmd,它从根目录\publish\中复制(特定于服务器的)配置文件,我在新发布后运行该目录
- 证书必须存储在\publish\文件夹中
- 由于(my)public contoso证书确实保护了一些域,因此只有在通过域调用应用程序时,https才能正常工作(否则,会显示众所周知的“不安全”消息)
- 为了能够使用https测试该应用程序,我已经在windows上打开了22224端口和“真正的”防火墙
- DNS指向我们的internet服务器的公共IP。
为了进行测试,我使用
而且…它可以工作…我正在为我的ASP.Net核心应用程序v2.2使用停靠部署,并使用了以下指南使其工作(此):
- 这个问题:
- 它经历了证书创建、在不同的机器上信任证书以及配置.Net项目(v2.0)
- 将证书(在本例中用于本地主机开发)存储在证书文件夹中:
- appsettings.json:
- 设置应用程序URL
- 通过launchsettings.json(仅限本地开发)
- 通过环境
,例如ASPNETCORE\u url=“http://+:5050;https://+:5051”
ASPNETCORE\u url=“http://+:5050;https://+:5051”dotnet运行
- 您不必编写任何设置代码,只需使用配置文件即可
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
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
,
"Kestrel": {
"EndPoints": {
"Http1": { "Url": "http://localhost:5000" },
"Http2": { "Url": "http://172.16.1.120:22222" }
}
}
}
{
"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"
}
}
}
}
}
"Kestrel": {
"applicationUrl": "https://localhost:5051;http://localhost:5050",
"Certificates": {
"Default": {
"Path": "certificates/localhost.pfx",
"Password": "MySecret",
"AllowInvalid": "true"
}
}
}
"kamapp-backend": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5051;http://localhost:5050",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"Kestrel": {
"EndPoints": {
"http": { "Url": "http://localhost:5000" }
}
}
}