Https 在windows Web服务器上使用公共证书运行/配置自托管控制台应用程序(ASP.net core 2.1,Kestrel)时出现问题

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

过去,我使用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 ipport=0.0.0.0:22224 certhash=31cf73308a768100d4d32fe6e77638593e68ab57 appid={A3A3A711F-c587-44e5-96bc-dca8a7f3fc3c}

  • 设置应用程序以侦听特定端口 在启动时从配置文件读取url-例如并应用 将其转换为(vb.net)HttpSelfHostConfiguration()
  • 这项工作没有问题,我可以根据需要配置应用程序(例如,在配置文件中为http配置一个端口,以便在intranet服务器上执行测试,在配置文件中为生产环境配置另一个端口,使用https)

    现在,我想对asp.net core 2.1.6应用程序执行同样的操作,它的工作方式似乎不一样。
    公共证书(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\中复制(特定于服务器的)配置文件,我在新发布后运行该目录
    https注释和证书:

    • 证书必须存储在\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运行

      • 您不必编写任何设置代码,只需使用配置文件即可
    强制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
    {
      "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" }
        }
      }
    }