Asp.Net Core启用免费SSL证书

浅浅记录一下为Blog申请免费SSL证书的步骤,以备后续需要时查阅。

现如今免费SSL证书的选择蛮多,这里不赘述,我选择的老牌Let's Encrypt,接下来按步骤记录一下在我家里的Windows电脑上申请SSL证书和在Asp.Net Core应用中进行部署的过程细节。ACME客户端选择Let's Encrypt官方推荐的CertBot

通过CertBot申请免费SSL证书

  1. 下载安装CertBot客户端(win-amd64安装包),若未在其github最新release中找到windows版本,可从历史版本中找到v2.9.0版本

  2. 安装完毕后,以管理员身份运行CMD

  3. 以申请单域名SSL证书为例,通过以下CMD命令执行,泛域名的过程也一样

certbot certonly --manual --preferred-challenges=dns -d knay.net
  1. 按提示一步一步完成即可,核心关键是域名所有权认证,建议通过DNS认证,根据提示添加一条TXT的DNS记录,稍等DNS生效即可继续(注意一定要等待这条DNS记录生效,能查询到才能敲回车进行下一步操作)

  2. 完成后会生成2个文件:privkey.pem 为私钥, fullchain.pem 为完整证书

  3. 该免费证书有效期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;
});
0 条评论

Leave a comment