HttpSelfHostConfiguration+.net framework4.5.2 发布HTTPS服务

HttpSelfHostConfiguration可以开启自宿主服务,即监听本地端口,然后发布对应的api服务,其实就是个webapi项目,但是可以不用挂载在IIS上,程序直接运行就可以

上次做完了HttpSelfHostConfiguration后,有要求,需要让自宿主服务支持https协议,这就麻烦了
要知道https可是需要证书啥的,刚好研究了一段时间,再同事的帮助下也算是做出来了,下来贴点教程数据上来
整个注册流程中需要用到IIS来生成证书

  • 注册安全证书
    在IIS中选择服务器证书
    再IIS中选择服务器证书
    依次点击 创建自签名证书->输入名称->确定保存
    在这里插入图片描述
    拷贝证书的指纹
    点击新增的证书信息,拷贝指纹数据,用以备用
    在这里插入图片描述
  • 使用cmd命令 删除、注册证书

使用https需要 要用CMD命令 将证书的指纹和 系统的端口、软件的GUID进行绑定
这样子 HttpSelfHostConfiguration才能启动对应端口的https服务,当然证书肯定也是用的 咱们新创建的证书喽,这一步 我略去,仅把指令贴出来,因为我后面会用代码去执行 这个cmd命令
先执行删除,在执行添加注册,防止端口已经被其他证书占用了

// port=端口,pfx=证书指纹 ,guid=当前程序GUID
netsh http delete sslcert ipport=0.0.0.0:port
netsh http add sslcert ipport=0.0.0.0:port certhash=pfx appid={Guid}
  • 代码中启动 https服务
using Newtonsoft.Json;
using Robot2.OpenApi.V2.Filter;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.ServiceModel.Channels;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Http.Cors;
using System.Web.Http.SelfHost;
using System.Web.Http.SelfHost.Channels;

namespace ConsoleApp2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string url = string.Format("https://localhost:20101");
                string port = "20101";
                string pfx = "e063bb5f4578a211fab76439e38cc93d92e56286";
                string guid = "78a9b36e-51e3-44e9-9ee0-abfd6d0e6b8d";
                List<string> cmds = new List<string>() {
                            $"/c netsh http delete sslcert ipport=0.0.0.0:{port}",
                            $"/c netsh http add sslcert ipport=0.0.0.0:{port} certhash={pfx} appid="+"{"+guid+"}",
                        };
                foreach (string cmd in cmds)
                {
                    var process = new Process()
                    {
                        StartInfo = new ProcessStartInfo
                        {
                            FileName = "cmd.exe",
                            Arguments = cmd,
                            RedirectStandardOutput = true,
                            UseShellExecute = false,
                            CreateNoWindow = false
                        }
                    };
                    process.Start();
                    process.WaitForExit();
                }
                //var config = new HttpSelfHostConfiguration(url);
                var config = new ExtendedHttpSelfHostConfiguration(url);//使用Https
                config.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
                config.Formatters.Add(new System.Net.Http.Formatting.JsonMediaTypeFormatter());
                HttpSelfHostServer _hostServer = new HttpSelfHostServer(config);
                config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
                config.EnableCors(new EnableCorsAttribute("*", "*", "GET, POST, PUT, DELETE, OPTIONS") { SupportsCredentials = true });
                config.Filters.Add(new AuthorFilter());
                config.Filters.Add(new ExceptionFilter());
                config.Routes.MapHttpRoute(
                 name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}",
                defaults: new
                {
                    controller = "Home",
                    action = "Index",
                    id = RouteParameter.Optional
                });


                _hostServer.OpenAsync().Wait();
                Console.WriteLine("服务端口打开成功");
            }
            catch (Exception ex)
            {
                Console.WriteLine("服务端口打开异常:" + JsonConvert.SerializeObject(ex));
            }
            Console.ReadKey();
        }

        public class ExtendedHttpSelfHostConfiguration : HttpSelfHostConfiguration
        {
            public ExtendedHttpSelfHostConfiguration(string baseAddress) : base(baseAddress) { }
            public ExtendedHttpSelfHostConfiguration(Uri baseAddress) : base(baseAddress) { }

            protected override BindingParameterCollection OnConfigureBinding(HttpBinding httpBinding)
            {
                if (BaseAddress.ToString().ToLower().Contains("https://"))
                {
                    httpBinding.Security.Mode = HttpBindingSecurityMode.Transport;
                }

                return base.OnConfigureBinding(httpBinding);
            }
        }
    }
}

执行https服务器下的controller方法成功(具体我这个Controller怎么写的,大家可以参考我上一篇的
HttpSelfHostConfiguration文章
在这里插入图片描述
特别提醒,https和http请求本身存在证书校验的问题,我用的postman请求的数据,postman默认是不支持自签名证书的,需要设置下 ,设置的链接如下
https://blog.csdn.net/q7w8e9r4/article/details/132140205

遇到 “postman Self-signed SSL certificate blocked” 错误是因为 Postman 检测到你正在尝试访问一个使用自签名 SSL 证书的网站,并且默认情况下,Postman 会阻止对这样的网站进行请求。 要解决这个问题,你可以按照以下步骤进行操作:
1.打开 Postman:打开 Postman 应用程序。
2.设置 SSL 证书验证:点击左上角的 “Settings”(设置)按钮,然后选择 “Settings”(设置)选项。
3.禁用 SSL 证书验证:在 “Settings”(设置)页面的左侧导航栏中,选择 “General”(常规)选项。在右侧的 “SSL certificate verification”(SSL 证书验证)部分,将开关切换为关闭状态。
4.重新发送请求:回到 Postman 的主界面,重新发送你的请求。 请注意,禁用 SSL 证书验证可能会导致你的请求不再验证服务器的证书,从而可能存在安全风险。因此,请确保你对要访问的网站的可信度有所了解,并仔细考虑在禁用 SSL 证书验证之前的安全性。 如果你仍然希望进行 SSL 证书验证,但遇到了自签名 SSL 证书的问题,你可以考虑导入服务器的自签名证书到 Postman 中。具体步骤如下:
5.获取自签名 SSL 证书:从服务器管理员或网站所有者获取自签名 SSL 证书文件(通常是以 .crt 或 .pem 结尾的文件)。
6.导入 SSL 证书:在 Postman 应用程序中,点击左上角的 “Settings”(设置)按钮,然后选择 “Settings”(设置)选项。在 “Settings”(设置)页面的左侧导航栏中,选择 “Certificates”(证书)选项。点击 “Add Certificate”(添加证书)按钮,并选择你的 SSL 证书文件。按照指示完成证书导入过程。
7.重新发送请求:回到 Postman 的主界面,重新发送你的请求。 通过导入自签名 SSL 证书,Postman 将能够验证服务器的证书,并安全地进行请求。
————————————————
版权声明:本文为CSDN博主「抓饭不吃皮牙子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/q7w8e9r4/article/details/132140205

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要在CSDN上安装.NET Framework 4.5.2,请按照以下步骤进行操作: 1. 打开您的浏览器并访问CSDN官网(www.csdn.net)。 2. 在网站的搜索栏中输入“.NET Framework 4.5.2”并点击搜索按钮。 3. 在搜索结果中找到与您操作系统相适应的.NET Framework 4.5.2版本,并点击链接进入相关下载页面。 4. 在下载页面上找到下载按钮,一般是一个绿色的按钮,上面标有“下载”或“立即下载”字样。点击该按钮开始下载.NET Framework 4.5.2安装程序。 5. 下载完成后,找到下载的安装文件,一般是一个以.exe为后缀名的可执行文件。双击打开该文件。 6. 安装程序将会启动,并向您展示.NET Framework 4.5.2的安装向导。 7. 按照向导的指示前进,阅读并同意许可协议。然后选择您想要安装的组件和目标文件夹。 8. 点击“下一步”或“安装”按钮,开始安装过程。 9. 安装过程可能会需要一些时间,等待安装程序完成安装。 10. 安装完成后,您将会收到安装成功的提示。关闭安装程序窗口,安装过程结束。 11. 现在您可以在您的系统中使用.NET Framework 4.5.2了。 请注意,以上步骤是基于假设您想要在CSDN上下载.NET Framework 4.5.2安装程序。实际步骤可能有所不同,具体取决于CSDN网站上提供的下载方式和界面设计。 ### 回答2: 要安装.NET Framework 4.5.2,请按照以下步骤操作: 1. 打开浏览器,转到CSDN官方网站的下载页面。 2. 在搜索栏中输入“.NET Framework 4.5.2下载”,然后点击搜索按钮。 3. 在搜索结果中找到.NET Framework 4.5.2的下载链接,并点击打开。 4. 在下载页面上,选择合适的版本和语言,然后点击下载按钮。 5. 下载完成后,找到下载的安装文件并双击打开。 6. 按照安装向导的提示,选择安装.NET Framework 4.5.2的选项和目标路径。 7. 点击“下一步”继续安装,等待安装程序完成。 8. 安装完成后会出现安装成功的提示,点击“完成”按钮关闭安装程序。 9. 现在您已经成功安装了.NET Framework 4.5.2,并可以在您的计算机上使用该软件。 请注意,安装过程可能会因您的计算机配置和网络状况而有所不同。确保您的计算机有足够的存储空间和稳定的网络连接。如果遇到任何错误或问题,请尝试重新下载并安装,或者咨询CSDN官方支持。 ### 回答3: 首先,csdn是一个IT技术交流社区,并不是一个需要安装的软件或框架。而.NET Framework 4.5.2是一个用于开发和运行Windows应用程序的软件框架。因此,无法直接将.NET Framework 4.5.2安装为csdn。 要访问csdn网站,您只需使用浏览器打开任一常用的网页浏览器(如Google Chrome、Mozilla Firefox等),在地址栏中键入"www.csdn.net"并按下回车键即可。这样您就可以访问和使用csdn网站上的各种功能。 而要安装.NET Framework 4.5.2,您可以按照以下步骤进行操作: 1. 首先,从微软官方网站(https://dotnet.microsoft.com/)上下载.NET Framework 4.5.2的安装程序。 2. 运行下载的安装程序,按照向导的指示逐步执行安装过程。 3. 在安装过程中,您可能需要接受许可协议、选择安装目录以及额外的组件等。根据您的需要进行选择。 4. 完成安装后,您可以在计算机上运行使用.NET Framework 4.5.2开发的应用程序。 安装完成后,您将能够在计算机上运行需要.NET Framework 4.5.2支持的应用程序,并利用其提供的功能和特性进行开发。同时,您也可以通过在代码中引用相应的类库和命名空间,来使用.NET Framework 4.5.2的功能和资源。 希望以上解答能够对您有所帮助。如果您有更多问题或需要进一步说明,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值