Asp.Net Core启用免费SSL证书
浅浅记录一下为Blog申请免费SSL证书的步骤,以备后续需要时查阅。
现如今免费SSL证书的选择蛮多,这里不赘述,我选择的老牌Let's Encrypt,接下来按步骤记录一下在我家里的Windows电脑上申请SSL证书和在Asp.Net Core应用中进行部署的过程细节。ACME客户端选择Let's Encrypt官方推荐的CertBot。
通过CertBot申请免费SSL证书
下载安装CertBot客户端(win-amd64安装包),若未在其github最新release中找到windows版本,可从历史版本中找到v2.9.0版本
安装完毕后,以管理员身份运行CMD
以申请单域名SSL证书为例,通过以下CMD命令执行,泛域名的过程也一样
certbot certonly --manual --preferred-challenges=dns -d knay.net
按提示一步一步完成即可,核心关键是域名所有权认证,建议通过DNS认证,根据提示添加一条TXT的DNS记录,稍等DNS生效即可继续(注意一定要等待这条DNS记录生效,能查询到才能敲回车进行下一步操作)
完成后会生成2个文件:privkey.pem 为私钥, fullchain.pem 为完整证书
该免费证书有效期90天,需要在到期前再重复上述命令生成新的证书文件
Asp.Net Core中启用SSL证书
以Asp.Net Core+KestrelServer为例。Program.cs中Code如下,因CertBot生成的证书文件为pem,直接配置使用pem文件会运行时出错。因此这里需要进行x509证书格式的转换。
//SSL证书,存储路径请改为你自己的正确路径地址
builder.Services.Configure<KestrelServerOptions>(options =>
{
options.Listen(IPAddress.Any, 80);
options.Listen(IPAddress.Any, 443, listenOptions =>
{
var certFilePath = Path.Combine(AppContext.BaseDirectory, "SOMEDIR", "fullchain.pem");
var keyFilePath = Path.Combine(AppContext.BaseDirectory, "SOMEDIR", "privkey.pem");
var certPem = File.ReadAllText(certFilePath);
var keyPem = File.ReadAllText(keyFilePath);
var x509 = X509Certificate2.CreateFromPem(certPem, keyPem);
listenOptions.UseHttps(x509);
});
});
将http请求强制重定向为https
var app = builder.Build();
app.UseHttpsRedirection();
若有使用http压缩,则打开EnableForHttps启用开关
builder.Services.AddResponseCompression(options =>
{
options.EnableForHttps = true;
options.Providers.Add<BrotliCompressionProvider>();
options.Providers.Add<GzipCompressionProvider>();
options.MimeTypes = ResponseCompressionDefaults.MimeTypes;
});
builder.Services.Configure<BrotliCompressionProviderOptions>(options =>
{
options.Level = CompressionLevel.Fastest;
});
builder.Services.Configure<GzipCompressionProviderOptions>(options =>
{
options.Level = CompressionLevel.SmallestSize;
});
声明: 本站遵循署名-非商业性使用-相同方式共享4.0共享协议. 转载请注明转自 Knay.Net ™