附上原文链接:https://blogs.msdn.microsoft.com/jpsanders/2009/09/29/how-to-walkthrough-using-httplistener-or-http-server-unmanaged-code-c-as-an-ssl-simple-server/

写这边完全是怕原链接挂了,时间长了命令难以记住。

服务器监听代码

服务器代码只需将监听地址前缀改为https,其他都一样。

HttpListener  httpListen = new HttpListener();
httpListen .Prefixes.Add("https://192.168.3.22:10022/xxx/");
httpListen .Start();

服务器生成自签名证书

这是MakeCert.exe的文档:http//msdn.microsoft.com/en-us/library/bfsktky3.aspx。可以使用此程序为应用程序生成自签名服务器证书。

使用Visual Studio 2008-2010,您只需使用程序菜单中的Visual Studio 2008或2010命令提示符即可访问MakeCert.exe。  (注意:对于Vista及更高版本,请确保您作为管理命令提示符运行,以便您具有适当的权限)

//MakeCert命令:
makecert.exe -sr LocalMachine -ss MY -a sha1 -n“CN = jsan17708317”-sky exchange -pe -eku 1.3.6.1.5.5.7.3.

该命令应该返回'Succeeded'。

现在,您需要确保Root Authority是可信的。要从上面使用的相同命令提示符执行此操作,请键入MMC。然后选择“文件”,“添加/删除管理单元...”

然后点击“添加”按钮,选择“证书”。点击“添加”按钮......

选择“计算机帐户”,然后单击“下一步>”,“完成”,“关闭”和“确定”。

您应该能够扩展左侧的树以显示个人证书并找到您刚添加的那个(我的唯一一个显示)...

双击您的证书,您将看到类似于此的内容:

您需要解决Red X问题(无法验证证书到受信任的根目录)。

单击此对话框中的“证书路径”选项卡,然后单击“查看证书”上的问题证书(根代理)。

您将看到问题是此证书不在“受信任的根”存储中。

要进入商店,请单击“详细信息”选项卡,然后单击“复制到文件...”按钮

点击“下一步>”两次,然后点击“浏览”按钮,将文件保存到本地文档目录(将其命名为“RootCert”),然后完成向导,直到您成功导出证书。现在我们将证书导入受信任的根存储区。

展开“受信任的根证书颁发机构”树,然后右键单击“证书”

从上下文菜单中选择“所有任务...”,然后选择“导入...”并导航到保存“RootCert”的位置,并通过完成向导导入证书。

现在,您应该可以返回到个人存储中的服务器证书,并查看证书没有问题(将此对话框保留为下一步):

这里的最后一步是获取指纹哈希以供下一节使用。

单击“详细信息”选项卡,然后向下滚动到对话框中的“指纹”字段,然后单击它。然后用鼠标扫除下面的数字(不要错过任何)并使用Ctrl + C组合键复制这些数字。

打开记事本并将这些数字粘贴到其中,以便在下一步中使用。

配置机器以使用证书

最后,您需要配置计算机以将刚刚创建的证书与HttpListener正在侦听https请求的端口和IP地址相关联。

更新:对于Vista及更高版本,您将使用此处列出的netsh http命令而不是httpcfg.exe:http//msdn.microsoft.com/en-us/library/cc307236( VS.85).aspx

您需要从命令行运行httpcfg并提供您在上一节中获得的哈希,但您需要删除这些数字之间的空格。在我的例子中,我删除了空格,哈希是:f4bb35424190e006e5476e97430c5b8136ee5da5

这是我运行的httpcfg命令,用于关联与我的机器和端口8081(/ i 0.0.0.0:8081)关联的所有IP地址的证书:

//httpcfg命令:
httpcfg set ssl / i 0.0.0.0:/h f4bb35424190e006e5476e97430c5b8136ee5da5

对于Vista及更高版本,您需要先生成一个guid。从上面用过的VS提示符生成可以输入的证书:guidgen.exe。然后点击复制按钮复制新创建的GUID。将其与您的哈希一起粘贴到记事本中。您将需要文本的第一部分(例如:{FCB0C645-E745-490F-9E7D-2171E03DC9B0})进行下一步。

//netsh命令
netsh http add sslcert ipport = 0.0.0.0: certhash = f4bb35424190e006e5476e97430c5b8136ee5da5 appid = {FCB0C645-E745-490F-9E7D-2171E03DC9B0}

运行时,您将看到结果:HttpSetServiceConfiguration以0结束。

现在仔细检查此计算机的SSL绑定:

C:\ Program Files \支持工具> httpcfg查询ssl 
    IP:
    0.0.0.0:8081哈希:f4bb35424190e0 6e5476e9743 c5b8136ee5da5指导
    :{00000000-0000-0000-0000-000000000000} 
    CertStoreName:(null)
    CertCheckMode:0 
    RevocationFreshnessTime:0 
    UrlRetrievalTimeout: 0 
    SslCtlIdentifier:(null)
    SslCtlStoreName:(null)
    标志:0 
------------------------------------ ------------------------------------------

对于Vista及以上命令是:netsh http show sslcert

故障排除

如果应用程序不起作用,首先验证您是否正确执行了上述每一步(没有遗漏某些内容或某些步骤)。

验证您的证书是否显示IP和Hash字段与您正在侦听的内容相对应,并且Hash是您先前为证书获取的哈希。

检查httpcfg查询ssl并查看是否有其他侦听器可能与同一端口冲突。使用命令http delete ssl / i xxxx:8081删除冲突(将xxxx替换为您在同一端口上侦听的任何IP地址)。

对于Vista及更高版本,请确保您使用管理权限运行HttpListener代码,否则您将无法注册您的计算机名称(您将获得访问被拒绝或来自非托管代码的错误代码5)。

补充信息

这是一个简单的例子。您可能不希望在处理一个请求后停止侦听。您需要提供一种方法来优雅地关闭侦听器并处理工作线程上的请求。

您可以在HttpCfg中指定特定的IP范围(在MSDN中搜索HttpCfg语法)。在我的示例中,您可以使用此绑定到IP地址10.10.3.4:httpcfg 
set ssl / i 10.10.3.4:8081 / h f4bb35424190e006e5476e97430c5b8136ee5da5

您无法在同一端口上侦听http和https流量。

客户端代码

    public bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
  return true;
}   if (serverUrl.StartsWith("https", StringComparison.OrdinalIgnoreCase))
  {
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
  }   X509Certificate2 cert = new X509Certificate2(@"C:\Users\Administrator\Documents\RootCert.cer");
  objRequest.ClientCertificates.Add(cert);

.NET下寄宿于控制台的HTTPS监听的更多相关文章

  1. linux下开启oracle服务和开启监听

    su - oracle  切换到oracle用户模式下 sqlplus /nolog  //登录sqlplus SQL> connect /as sysdba  //连接oracle SQL&g ...

  2. Layui select下拉框改变之 change 监听事件(转)

    在layui中使用 jquery 触发select 的 change事件无效 使用layui.use监听select事件 <select lay-filter="demo" ...

  3. 移动端控制视频点击播放点击下一个视频时自动停止播放&监听滑动溢出屏幕高度时停止播放

    直接上代码js部分: <script type="text/javascript"> var go;//记录video播放器位置 var video=document. ...

  4. Linux下的启动oracle服务 启动监听 开放端口操作

    尝试登录oracle 使用root用户将没有sqlplus命令 [root@localhost ~]# sqlplus /nolog bash: sqlplus: 未找到命令...     [root ...

  5. Linux 系统下10个查看网络与监听的命令

    下面列出来的10个基础的每个linux用户都应该知道的网络和监控命令.网络和监控命令类似于这些: hostname, ping, ifconfig, iwconfig, netstat, nslook ...

  6. Linux下如何查看哪些端口处于监听状态

    查看某一端口的占用情况: lsof -i:端口号 前提:首先你必须知道,端口不是独立存在的,它是依附于进程的.某个进程开启,那么它对应的端口就开启了,进程关闭,则该端口也就关闭了.下次若某个进程再次开 ...

  7. linux下mysql无法看到3306端口监听

    这个问题搞定了,原因是我的my.cnf有话:skip-network注释掉,然后运行netstat -an|grep 3306 就可以看到了

  8. Self Host模式下的ASP. NET Web API是如何进行请求的监听与处理的?

    构成ASP.NET Web API核心框架的消息处理管道既不关心请求消息来源于何处,也不需要考虑响应消息归于何方.当我们采用Web Host模式将一个ASP.NET应用作为目标Web API的宿主时, ...

  9. 【PHP】xampp配置多个监听端口和不同的网站目录(转)

    转自:https://blog.csdn.net/cc1314_/article/details/75646344 windows下使用xampp配置多个监听端口和不同的网站目录 一:配置Apache ...

随机推荐

  1. Luogu P2391 白雪皑皑 && BZOJ 2054: 疯狂的馒头 并查集

    4月的时候在luogu上做过 白雪皑皑 这道题,当时一遍AC可高兴了qwq,后来去了个厕所,路上忽然发现自己的做法是错的qwq...然后就咕咕了qwq 今天看到了 疯狂的馒头 ,发现一毛一样OvO.. ...

  2. 读取properties和xml中配置文件的值

    五种方式让你在java中读取properties文件内容不再是难题 在java中读取properties和xml文件中的方法:https://www.cnblogs.com/ConfidentLiu/ ...

  3. mycat学习日记:关于联表查询

    https://www.cnblogs.com/toulon/p/4832895.html 在使用数据库中间件之前,我就想到分库分表的操作对于联表操作可能会显得非常复杂.因为如果数据是分片存储的,如果 ...

  4. Unity PlayerPrefs

    对于游戏存档,储存最高分,排行榜都需要用到储存,现在存储的方式有很多,可以存本地的Json,XML,Sqlite,还有一种就是unity自带的一种存储PlayerPrefs. 那么这个PlayerPr ...

  5. python3+Appium自动化05-xpath定位

    概念 xpath定位是一种路径定位方式,主要是依赖于元素绝对路径或者相关属性来定位,但是绝对路径xpath执行效率比较低(特别是元素路径比较深的时候),一般使用比较少.通常使用xpath相对路径和属性 ...

  6. com.google.gson.stream.MalformedJsonException的解决办法

    关于Gson解析的异常,如果你程序出现以下的异常,有两种可能性:‘ 1. 找到一个JSON格式的验证工具,这个网上很多大家可以百度下: 2.你的JSON格式验证没有问题,却一直报这个解析错误,请确定你 ...

  7. SpringBoot | 第二十章:异步开发之异步请求

    前言 关于web开发的相关知识点,后续有补充时再开续写了.比如webService服务.发邮件等,这些一般上觉得不完全属于web开发方面的,而且目前webService作为一个接口来提供服务的机会应该 ...

  8. nodejs入门学习笔记一——一个完整的http路由服务实现

    开始学习nodejs! 参考书籍:The Node Beginner Book ,所有问题和讨论都围绕本书. 1.学习nodejs需要具备的基础知识: js基本语法,基本上写过前端的都能满足,原生js ...

  9. How to Install Apache Solr 4.5 on CentOS 6.4

    By Shay Anderson on October 2013 Knowledge Base  /  Linux  /  How to Install Apache Solr 4.5 on Cent ...

  10. 从零开始的全栈工程师——js篇2.5

    数据类型与全局属性 js的本质就是处理数据 数据来自于后台的数据库所以变量就起到一个临时存储数据的这作用ECMAscirpt 制定了js的数据类型 一.数据类型 1.基本数据类型 基本数据类型就是简单 ...