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

这篇具有很好参考价值的文章主要介绍了HttpSelfHostConfiguration+.net framework4.5.2 发布HTTPS服务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

  • 注册安全证书
    在IIS中选择服务器证书
    HttpSelfHostConfiguration+.net framework4.5.2 发布HTTPS服务,.net,https,数据库
    依次点击 创建自签名证书->输入名称->确定保存
    HttpSelfHostConfiguration+.net framework4.5.2 发布HTTPS服务,.net,https,数据库
    拷贝证书的指纹
    点击新增的证书信息,拷贝指纹数据,用以备用
    HttpSelfHostConfiguration+.net framework4.5.2 发布HTTPS服务,.net,https,数据库
  • 使用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文章
HttpSelfHostConfiguration+.net framework4.5.2 发布HTTPS服务,.net,https,数据库
特别提醒,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文章来源地址https://www.toymoban.com/news/detail-775066.html

到了这里,关于HttpSelfHostConfiguration+.net framework4.5.2 发布HTTPS服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RDIFramework.NET CS敏捷开发框架 V6.0发布(支持.NET6+、Framework双引擎,全网唯一)

    全新RDIFramework.NET V6.0 CS敏捷开发框架发布,全网唯一支持.NET6+,Framework双引擎,降低开发成本,提高产品质量,提升用户体验与开发团队稳定性,做软件就选RDIFramework.NET开发框架。 RDIFramework.NET C/S敏捷开发框架 ,是我司重磅推出的基于.NET的快速信息化系统开发、整合框架,

    2024年02月15日
    浏览(37)
  • 翻过那座山——Jenkins编译发布web程序(.net framework web application)

    📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香! 📢本文作者:由webmote 原创 📢作者格言:新的征程,我们面对的不是技术而是人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 ! 当一根根白发慢慢的爬到我的头上

    2024年02月12日
    浏览(45)
  • 【Visual Studio 2022创建ASP.NET Web应用程序(.NET Framework)发布并部署到局域网 及“常见权限问题和不列出目录问题解决”】

    然后给项目命名并选择文件保存位置 用一个空项目进行举例 创建完成如下 点击更多模板选择Web窗体 创建成功如下 .aspx页面编写前端代码,.aspx.cs页面编写后端代码 通过插入表格和拉取控件快速完成 然后给Button按钮设置一个点击事件,双击按钮后会跳到.aspx.cs页面,完善下面

    2024年02月07日
    浏览(77)
  • Linux(统信UOS) 发布.Net Core,并开启Https,绑定证书

    实际开发中,有时会需要为小程序或者需要使用https的应用提供API接口服务,这就需要为.Net Core 配置https,配置起来很简单,只需要在配置文件appsettings.json中添加下面的内容即可 如上图,Kestrel 在最外层,如果已经有同名项,直接其下面添加https配置即可。

    2024年02月04日
    浏览(34)
  • .NET Framework 4.5升级到 .NET Framework 4.8.x

     .NET Framework 4.5升级到.NET Framework 4.8.x的步骤分享如下: 1.下载并安装 .NET Framework 4.8.x 从 Microsoft 的官方网站上下载 .NET Framework 4.8.x 的安装程序,并按照提示安装。在安装过程中,可以选择是否安装语言包和参考源代码。 2.更新现有应用程序 完成 .NET Framework 4.8.x 的安装后,需

    2024年02月04日
    浏览(43)
  • VS2022 安装 .NET Framework 4.0 和 .NET Framework 4.5 的方法

    2022年5月27日,刚刚把VS2019升级到了VS2022,安装时已经不提供.NET Framework 4.0和.NET Framework 4.5的目标框架了,打开VS也提示不支持目标框架。 1、下载.NET Framework框架 .NET Framework 4.5.2 .NET Framework 4.5.1 .NET Framework 4.5 .NET Framework 4.0 备份链接:https://pan.baidu.com/s/1AIuva6GjGGKQ2XJftZpIyQ 提取码

    2024年02月12日
    浏览(56)
  • VS2022 安装 .NET Framework 4.0或.NET Framework 4.5 以及其他版本

    VS2019升级到了VS2022之后,安装时已经不提供.NET Framework 4.0和.NET Framework 4.5的目标框架了,打开VS也提示不支持目标框架。 下载.NET Framework框架 官网下载对应版本的sdk:https://dotnet.microsoft.com/zh-cn/download/visual-studio-sdks?cid=getdotnetsdk 点击开发者工具包进行下载; 下载完之后直接双

    2024年02月11日
    浏览(42)
  • ASP.NET Website 项目 .NET Framework 4.0 ~ .NET Framework 4.8支持c#哪些版本(Website)

    本文讲的是Website网站项目,由于维护老项目Website .net framework4.0,遇到c#6.0语法不支持。便做了点记录 下面是关于 ASP.NET Website 项目在不同版本的 .NET Framework 下支持的 C# 版本的总结: ASP.NET Website 项目在 .NET Framework 4.0 中,默认使用 C# 4.0 版本。该版本不支持 C# 6.0 及更高版本

    2024年02月16日
    浏览(39)
  • .NET Framework

    它是一个虚拟机,用于编译和执行用 C#、VB.Net 等不同语言编写的程序。 操作系统架构和 CPU 架构的组合称为平台。 平台相关意味着编程语言代码将仅在特定操作系统上运行。 .NET 应用程序依赖于平台,因为 .NET 框架只能在基于 Windows 的操作系统上运行。由于 Mono 框架,.Net

    2024年02月06日
    浏览(52)
  • .NET Framework 概述

    C# 语言是C和C++语言演变而来的,是用于创建和运行在.NET CLR上的程序语言之一,是Microsoft 专门为使用.NET 平台而创建的一门新的语言。 什么是.NET Framework        .NET Framework 是微软的几个开发团队一起努力的成果,主要用于产生一个可以快速开发、部署网站服务及应用程序

    2024年02月06日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包