如何将 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。
我读过其他类似的答案,但他们要么使用 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。