EzHttp 使用Https协议时证书如何部署
今天为EzHttp增加了https支持, EzHttp介绍见这里:使用EzHttp框架 开发基于HTTP协议的CS轻应用
服务端启动时会创建自签名证书,并将其绑定到启动参数url对应的端口上。
服务端导出的cer文件(证书的公钥部分)位于服务端程序运行目录下。
复制该文件到客户端目录并调用指定证书文件的初始化函数即可。
问:为什么需要手动部署而不使用客户端连接服务端自动下载?
答:因为是自签名证书,通过标准http协议传输有被劫持的风险。
如12306这种,中间人可以伪造一个名称和创建时间一样的证书替换来欺骗客户端。
所以如果发布客户端,最好是在客户端程序打包时一并打包。
部署方式
服务端不需要额外的处理。
将cer文件复制到客户端目录后,通过调用如下方法对客户端进行初始化即可。
EzClient.Initialize("https://127.0.0.1:9555/", ".\\ezhttp.cer");
服务安全性小贴士
大家可能都应该了解,一般C#客户端在使用https请求时,如果网站证书是无效证书(自签名、过期等),我们就需要添加一个证书回调函数来决定是否通过服务端证书验证
public RemoteCertificateValidationCallback ServerCertificateValidationCallback { get; set; }
一般我们写的工具的时候,回调实现都是这样的,因为网上的代码基本上都是这样的,于是越来越多的程序里面的回调函数也是如此简单而粗暴,所以这就带来了安全性问题。
private bool ServerCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
这表示什么呢?这表示客户端接受一切服务端证书,不管真假。
但这在开发我们自己的基于https的服务时是绝对不可取的,特别是使用自签名证书的时候,操作系统通过回调将验证服务器证书的任务交给了客户端程序。
我们开发时候要保证客户端请求发送的目的地是我们自己web服务而不是某个中间人。
因此,我在开发EzHttp的时候,通过从服务端导出的客户端证书来验证服务端的合法性。遵循了基于https的服务的证书验证的最佳实践。
private bool ServerCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
var data = certificate.GetRawCertData();
return EzClient.Certs.Any(x => x.SequenceEqual(data));
}
EzHttp 使用Https协议时证书如何部署的更多相关文章
- LR录制https协议报证书错误,导航已阻止
使用IE浏览器录制https协议报证书错误,导航已阻止,修改如下配置文件:
- ASP.Net连接WebServer使用Https协议(证书)
ASP.Net使用Https(证书)协议连接WebService 最近使用ASP.Net连接WebService,不过走的协议是Https的,我一般用的使用都是普通的http协议.所以刚开始有点不值从 ...
- nginx 使用HTTPS协议-SSL证书模块报错解决-附nginx安装 : [emerg] the "ssl" parameter requires ngx_http_ssl_module in nginx.c
Linux系统下ngnix使用HTTPS协议启动报错: nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_modul ...
- Fiddler抓取https协议的证书导入过程
fildder抓取https的设置以及证书导出 打开fiddler界面,选择左上角菜单栏Tools-Options 出现Options界面后,选择HTTPS选项卡 勾选上Capture HTTPS C ...
- Apache服务器配置https协议/SSL证书的方法
转载于:http://www.server110.com/apache/201309/1542.html
- 大型网站的 HTTPS 实践(1):HTTPS 协议和原理
转自:http://op.baidu.com/2015/04/https-s01a01/ 1 前言 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS.本文重 ...
- HTTPS协议简介
一.HTTPS简介 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS.本文重点介绍 HTTPS 协议, 并简单介绍部署全站 HTTPS 的意义. HTTPS ...
- 大型网站的 HTTPS 实践(一)—— HTTPS 协议和原理
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt387 1 前言 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 ...
- 大型网站的 HTTPS 实践(一)—— HTTPS 协议和原理(转)
原文链接:http://op.baidu.com/2015/04/https-s01a01/ 1 前言 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS.本 ...
随机推荐
- angularJS之ng-repeat
<p>使用 ng-repeat 来循环数组</p> <ul> <li data-ng-repeat="x in numArray&quo ...
- Ubuntu 开机启动是出现 grub rescue 解决办法
最近想在Ubuntu的基础上,再在硬盘的一个分区安装Windows,其中有次不小心,在安装windows的时候,删除了一个分区,造成下次启动Ubuntu系统出现 grub rescue 下面是我的修复 ...
- Django中使用CKEditor代码高亮显示插件Code Snippet
Django使用CKEditor可以安装django-ckeditor这个模块,具体步骤可按照这里进行:http://www.nanerbang.com/article/2/ 我在富文本编辑器中想使用 ...
- React中父组件与子组件之间的数据传递和标准化的思考
React中父组件与子组件之间的数据传递的的实现大家都可以轻易做到,但对比很多人的实现方法,总是会有或多或少的差异.在一个团队中,这种实现的差异体现了每个人各自的理解的不同,但是反过来思考,一个团队用 ...
- Redhat
vm1 port:192.168.210.102 user:root;pwd:123456 user:openflowpwd:openflowKkm09!q esx4.1 server 安装一.修改I ...
- jquery data属性的使用
var func=function(){console.log("test")};$("div").data("test",func);$( ...
- javaEE与JSP基础
JSP基础 1. jsp的作用: * Servlet: > 缺点:不适合设置html响应体,需要大量的response.getWriter().print("<html ...
- Error--解决使用Application Loader提交ipa包审核时的报错:ERROR ITMS-90168: "The binary you uploaded was invalid."
在提交iTunes Connect审核时,使用Application Loader提交ipa包时报错:ERROR ITMS-90168: "The binary you uploaded w ...
- Akari谜题(关灯问题)的开灯解法
提高解时预处理的速度 本方法的结果是得到满足所有黑色有数字方块的一个带有未照亮的块的可能解集. 解集大小为 4~(3号块数量+1号块数量)+6~(2号块数量)-灯互相照射到的解的集合.集合中的灯为黄色 ...
- 【Egret】3d 服务器配置
在服务器MIME里添加这些类型就可以了: