当前位置: 首页 > news >正文

C# 实现基于exe内嵌HTTPS监听服务、从HTTP升级到HTTPS 后端windows服务

        由于客户需要把原有HTTP后端服务升级为支持https的服务,因为原有的HTTP服务是一个基于WINDOWS服务内嵌HTTP监听服务实现的,并不支持https, 也不像其他IIS中部署的WebAPI服务那样直接加载HTTPS证书,所以这里需要修改原服务支持https和服务器环境上进行HTTPS端口绑定设置,具体如下:

(注:以下操作需要你已经具备了HTTPS证书。)

1、安装证书,双击pfx文件,安装到:“本地计算机”–>“个人”;

2、双击打开crt证书,详细信息中可以看到(certhash)指纹 相关信息;

3、执行端口绑定(默认443端口)

netsh http add sslcert ipport=0.0.0.0:8080 certhash=指纹 appid={程序GUID/newguid} clientcertnegotiation=enable

4、服务端程序实现:

using System;
public class HttpService
{public MyHttpServer(){System.Net.HttpListener httpListener = new System.Net.HttpListener();httpListener.AuthenticationSchemes =  System.Net.AuthenticationSchemes.Anonymous;httpListener.Prefixes.Add("https://*:8000/"); // 支持httpshttpListener.Start();new System.Threading.Thread(new System.Threading.ThreadStart(delegate{while (true){try{System.Net.HttpListenerContext httpListenerContext =  httpListener.GetContext();new System.Threading.Thread(new  System.Threading.ParameterizedThreadStart((input) =>{System.Net.HttpListenerContext ctx =  (System.Net.HttpListenerContext)input;System.Net.HttpListenerRequest request = ctx.Request;string pram = request.QueryString["Data"];//Get入参string responseMessage = string.Empty;//返回值if (!string.IsNullOrEmpty(pram)){//Get入参pramOrg = pram;pram = System.Web.HttpUtility.UrlDecode(pram);}//POST入参if (request.HttpMethod == "POST"){//处理业务请求StreamReader reader = new  StreamReader(request.InputStream, Encoding.UTF8);pram = reader.ReadToEnd();reader.Close();reader.Dispose();}#region 业务处理try{//业务处理responseMessage = "业务结果";}catch (Exception ex){//异常处理responseMessage = ex.Message;}#endregion 业务处理#region 返回给调用者//输出类型httpListenerContext.Response.ContentType = "text/html;  charset=UTF-8";//返回状态httpListenerContext.Response.StatusCode = 200;//设置授权,尝试解决Jquery跨域问题//httpListenerContext.Response.Headers["Access-Control-Allow-Origin"] = "*";//httpListenerContext.Response.Headers["Access-Control-Allow-Methods"] =  "GET,POST";//httpListenerContext.Response.Headers["Access-Control-Max-Age"] = "1000";try{//输出界面内容if (!string.IsNullOrEmpty(responseMessage)){//返回文本内容using (StreamWriter writer = new  StreamWriter(httpListenerContext.Response.OutputStream)){writer.Write(responseMessage);}}}catch{//刷新太快异常,不做处理}#endregion 返回给调用者})).Start(httpListenerContext);}catch{ }}})).Start();}
}

如上面执行端口绑定过程中报错,或添加失败,可以参考下面的处理:

1、检查netsh 命令的参数是否正确;

2、SSL 证书添加失败, 错误: 1312 指定的登录会话不存在。它可能已经被终止。的处理方法:

     键盘 WIN+R 输入mmc.exe,如下:

    

  点‘确定“,弹出如下控制台根节点界面,

选择 文件->添加/删除管理单元,或直接快捷键ctrl+m 弹出如下,并进行操作:

然后再到个人导入证书

最后将SSL证书绑定至端口号

netsh http add sslcert ipport=0.0.0.0:8080 certhash=指纹 appid={程序GUID/newguid} clientcertnegotiation=enable

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【C++】CMake入门
  • React_自定义组件_下拉框
  • 面试题009-Java-MyBatis
  • 【Python】Requests 库使用示例
  • Maven 项目编译提示 unparseable pom 的解决方法
  • 练习:随机点名器5
  • 数据结构与算法基础-学习-37-平衡二叉树(Avl树)之删除节点
  • 各向异性含水层中地下水三维流基本微分方程的推导(二)
  • @Autowired 和 @Resource 区别的补充说明与示例
  • Datadomain存储上的文件大小,linux环境建议使用du -sh --apparent-size或ll -sh来查看
  • 【JAVA入门】Day15 - 接口
  • 实现前端用户密码重置功能(有源码)
  • 【C语言】 —— 预处理详解(下)
  • ubuntu 换源
  • #VERDI# 关于如何查看FSM状态机的方法
  • [Vue CLI 3] 配置解析之 css.extract
  • 2017年终总结、随想
  • Angular 2 DI - IoC DI - 1
  • es6要点
  • IndexedDB
  • js 实现textarea输入字数提示
  • k个最大的数及变种小结
  • log4j2输出到kafka
  • PAT A1017 优先队列
  • Python学习之路13-记分
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • 测试如何在敏捷团队中工作?
  • 程序员最讨厌的9句话,你可有补充?
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 基于web的全景—— Pannellum小试
  • 看域名解析域名安全对SEO的影响
  • 两列自适应布局方案整理
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 正则表达式
  • 阿里云ACE认证学习知识点梳理
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #1014 : Trie树
  • #includecmath
  • #pragma once与条件编译
  • $.proxy和$.extend
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (利用IDEA+Maven)定制属于自己的jar包
  • (论文阅读11/100)Fast R-CNN
  • (三) diretfbrc详解
  • (生成器)yield与(迭代器)generator
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .Net FrameWork总结