使用C#写的HTTPS简易服务器

由于监控网络之用,需要写一个https服务器。

由于用到https,因此还需一个域名证书,可以免费申请,也可以用一个现有的。

接下来还需在Windows上安装证书,注册证书。

安装证书

找到证书,点击,一路安装即可。

注册证书

查询证书

bash 复制代码
certutil -store my

查询结果

bash 复制代码
================ 证书 1 ================
序列号: 52fa907d41a8439c403d2d9e97453da8
颁发者: CN=XinChaCha Trust OV CA, O=Beijing Xinchacha Credit Management Co., Ltd., C=CN
 NotBefore: 2024/12/20 8:00
 NotAfter: 2025/12/21 7:59
使用者: CN=*.cdut.edu.cn, O=成都理工大学, S=四川省, C=CN
非根证书
证书哈希(sha1): 48c0f63170597f65c566903ac4b3e176828a03d4
  密钥容器 = {318BC6DA-F81A-42CB-BAD8-9CF8ECC96560}
  唯一容器名称: 74750d459b9e33bdb358fe76f9cc6fe9_73d663f3-bf98-4bb1-a62b-794087b69f98
  提供程序 = Microsoft Enhanced Cryptographic Provider v1.0
私钥不能导出
通过了加密测试
CertUtil: -store 命令成功完成。

记录下"证书哈希(sha1)"值:48c0f63170597f65c566903ac4b3e176828a03d4

注册证书

bash 复制代码
netsh http add sslcert ipport=0.0.0.0:8443 certhash=48c0f63170597f65c566903ac4b3e176828a03d4 appid={12345678-1234-1234-1234-123456789012}

替换 certhash。

appid,就是一个guid,只要不重复就好了。

编写测试代码

csharp 复制代码
 static void Main(string[] args)
 {
     // 证书路径和密码
     string certificatePath = "FullSSL.pfx";
     string certificatePassword = "12345";

     // 创建证书对象
     X509Certificate2 certificate = new X509Certificate2(certificatePath, certificatePassword);

     // 创建HttpListener
     HttpListener listener = new HttpListener();

     // 添加HTTPS前缀(注意:需要在系统上注册此URL)
     listener.Prefixes.Add("https://+:8443/");

     // 启动监听
     listener.Start();
     Console.WriteLine("Listening on https://+:8443/");

     // 处理请求
     while (true)
     {
         HttpListenerContext context = listener.GetContext();
         HttpListenerRequest request = context.Request;
         HttpListenerResponse response = context.Response;

         // 读取请求信息
         Console.WriteLine($"Request from {request.RemoteEndPoint}");
         //遍历headers
         foreach (string key in request.Headers.AllKeys)
         {
             Console.WriteLine($"{key}: {request.Headers[key]}");
         }

         Console.WriteLine($"Method: {request.HttpMethod}");
         Console.WriteLine($"URL: {request.Url}");

         // 创建响应
         byte[] buffer = Encoding.UTF8.GetBytes("Hello, this is an HTTPS server!");
         response.ContentLength64 = buffer.Length;
         response.OutputStream.Write(buffer, 0, buffer.Length);

         // 关闭响应
         response.Close();
     }
 }

测试

bash 复制代码
C:\Users\Zmrbak>curl -k https://127.0.0.1:8443/
Hello, this is an HTTPS server!

这里需要加参数 -k,否则由于证书和域名不匹配导致无法继续。

相关推荐
王道长服务器 | 亚马逊云12 分钟前
AWS Elemental MediaConvert:视频转码不再难
linux·服务器·网络·云计算·音视频·aws
qq_4798754318 分钟前
TCP网络编程本质
服务器·网络·tcp/ip
CodeCraft Studio20 分钟前
国产化Word处理控件Spire.Doc教程:用Java实现TXT文本与Word互转的完整教程
java·c#·word·spire.doc·word文档转换·txt转word·word转txt
Aevget40 分钟前
DevExpress WinForms v25.1亮点 - 电子表格组件、富文档编辑器全新升级
c#·编辑器·界面控件·devexpress·ui开发·winforms
一个专注写bug的小白猿44 分钟前
.net实现ftp传输文件保姆教程
后端·c#·.net
00后程序员张1 小时前
iOS 26 App 运行状况全面解析 多工具协同监控与调试实战指南
android·ios·小程序·https·uni-app·iphone·webview
qiuiuiu4132 小时前
正点原子RK3568学习日志19- Linux错误处理 字符驱动框架完全体
linux·服务器·学习·ubuntu
橘颂TA2 小时前
【Linux】 层层递进,抽丝剥茧:调度队列、命令行参数、环境变量
linux·运维·服务器·c/c++
X_szxj2 小时前
Volatility2在kali安装
linux·运维·服务器
2501_916007473 小时前
iOS 混淆实战,多工具组合完成 IPA 混淆、加固与发布治理(iOS混淆|IPA加固|无源码混淆|App 防反编译)
android·ios·小程序·https·uni-app·iphone·webview