栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

.netcore 5 linux部署启用https

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.netcore 5 linux部署启用https

文章目录
  • 前言
  • 一、证书获取
  • 二、使用步骤
    • 1.Startup.cs
    • 2.Program.cs
    • 2.userdefined.json
  • 总结


前言

.netcore 5 部署linux系统后开启https,与原本的.netcore2.1有一些差别


前提条件:默认创建web项目的时候已经勾选启用https

一、证书获取

笔者是从腾讯云购买的域名,同时可以申请免费ssl证书,有效期一年,过期之后可以重新免费申请。申请之后,下载证书文件,.netcore用到的证书与iis的一样,所以直接取iis目录里面的pfx证书使用,注意:申请证书的时候需要输入密码,密码后续需要配合证书一起使用。

二、使用步骤 1.Startup.cs

在此文件中可以开启https重定向,当访问http的时候会自动重新向到https,下面方法我加了个配置文件来配置是否启用https重定向

示例代码仅包含关键部分:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
	//开启Https重定向
	if (ConfigurationJson.IsUseHttps)
	{
		app.UseHttpsRedirection();
	}
}
2.Program.cs

使用Kestrel服务注册监听证书,开启https服务
代码如下(示例):

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup();
                    webBuilder.UseKestrel(SetHostUrl);
                });
                
		/// 
        /// 配置Kestrel Https
        /// 
        /// 
        private static void SetHostUrl(KestrelServerOptions options)
        {
            var hostUrls = ConfigurationJson.HostUrl;
            foreach (var endpointKvp in hostUrls.Endpoints)
            {
                var name = endpointKvp.Key;
                var url = endpointKvp.Value;
                if (url.IsEnabled)
                {
                    var address = IPAddress.Parse(url.Address);
                    options.Listen(address, url.Port, opt =>
                    {
                        //如果存在证书则启用https
                        if (url.Certificate != null)
                        {
                            switch (url.Certificate.Source)
                            {
                                case "pfx":
                                    if (!File.Exists(url.Certificate.Path))
                                        throw new FileNotFoundException($"未找到证书文件{url.Certificate.Path}");

                                    opt.UseHttps(url.Certificate.Path, url.Certificate.Password);
                                    break;
                                default:
                                    throw new NotSupportedException($"暂不支持{url.Certificate.Source}证书类型");
                            }
                            //opt.UseConnectionLogging();
                        }
                    });
                    //options.UseSystemd();
                }
            }
        }
2.userdefined.json

上述使用到的配置文件
代码如下(示例):

  
  "HostUrl": {
    "Endpoints": {
      "Http": {
        "IsEnabled": true,
        "Address": "0.0.0.0",
        "Port": "5000"
      },
      "Https": {
        "IsEnabled": false,
        "Address": "0.0.0.0",
        "Port": "5001",
        "Certificate": {
          "Source": "pfx",
          "Path": "config/apliu.xyz.pfx",
          "Password": "+HMYHJxTEX4="
        }
      }
    }
  },

演示地址:https://apliu.xyz


总结

关键代码是Program.cs中的启用kestrel代码

webBuilder.UseKestrel(SetHostUrl);

options.Listen(address, url.Port, opt =>
{
	opt.UseHttps(url.Certificate.Path, url.Certificate.Password);
});
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/985055.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号