如何将 SSL 证书应用于 .NET 5 api?

How to apply SSL certificate to .NET 5 api?

我读过其他类似的答案,但他们要么使用 IIS,谈论自签名证书,要么根本不符合目的。

我正在尝试创建一个简单的 Web API,它将托管在 Windows 机器上,使用 SQL Express 使用 .NET 5。

我可以创建一个自签名证书并在开发过程中使用它,但这将托管在客户的机器上并且他们可能有 SSL 证书。过去,对于 运行 仅在本地主机中的 Web 应用程序,我会这样做:

 public static IHostBuilder CreateHostBuilder ( string [] args ) =>
            Host.CreateDefaultBuilder( args )
                .ConfigureWebHostDefaults( builder =>
                {
                    builder.UseStartup<Startup>();
                    builder.UseKestrel(options => {
                        if ( ServerConfiguration.ShouldUseHttps() )
                        {
                            options.Listen( IPAddress.Any, 6050, listenOptions =>
                             {
                                 listenOptions.UseHttps( Path.Combine( "Certificates", "cert.pfx" ), CertificatePassword );
                             } );
                        }
                        else
                        {
                            options.Listen( IPAddress.Any, 6050 );
                        }
                    } );
                } );

其中 cert.pfx 是我的自签名证书。我会将该证书与软件一起发送,并告诉客户安装它,然后他们就可以使用 HTTPS,并且浏览器会信任该证书。对于本地主机应用程序可能足够了,但对于暴露的 API.

假设客户购买了 SSL 证书,我希望我的 .NET 应用程序使用该证书,该证书将与我的应用程序安装在同一台计算机上。我怎样才能做到这一点?

现在,我刚刚在另一台计算机上部署了我的应用程序,没有任何证书或其他任何东西,但是我当然会收到“SSL 证书不可信任”类型的错误(例如在邮递员中) .

如果客户端不购买SSL证书,是否可以使用自签名证书?

非常感谢。

不要在代码中配置端点。相反,请在 appsettings.json 文件中配置它们,如 the Kestrel documentation 中所述。您可以只配置一个端点,也可以配置多个。

这是一个示例配置,它具有 HTTP 和 HTTPS 端点,证书来自带有密码的 pfx 文件:

{
  "Kestrel": {
    "Endpoints": {
      "Http": {
        "Url": "http://localhost:5000"
      },
      "HttpsInlineCertFile": {
        "Url": "https://localhost:5001",
        "Certificate": {
          "Path": "<path to .pfx file>",
          "Password": "<certificate password>"
        }
      }
    }
  }
}

文档显示了证书的不同配置,例如 .pem 和密钥文件(例如您从 Let's Encrypt 获得的文件)或使用 Windows 证书存储。

这样,如果客户端获得自己的证书,只需更新 appsettings.json。