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.本 ...
随机推荐
- Node.js web快速入门 -- KoaHub.js
介绍 KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架.可以直接在项目里使用 ES6/7(Generator Function, Class, Async & ...
- 有关ospf抓包
有关ospf抓包 1.相关的路由器为这样子的: 路由器都运行了ospf: 抓包的链路为GE0/0/2 , 2.抓包图: 从图上我们可以看到,protocol info 这一栏里面出现了: hello ...
- 复杂SQL代码实例
DECLARE @begin DATETIME,@end DATETIME,@shanghutype INT, @beginshanghuarea BIGINT ,@endshanghuarea bi ...
- Docker存储驱动之总览
简介 本文会介绍Docker存储驱动的特性,别列出现在已经支持的存储驱动,最后,会介绍如果选型适合你的存储驱动. 可插拔的存储驱动架构 Docker的存储驱动架构是可插拔的,可以让你很方便的将适合你环 ...
- SignalR指定用户推送消息
一.首先,在MVC项目中安装SingalR包(SingalR2.0需要.net4.5以上,VS2010可以安装1.1.3版本,本例为VS2010+SignalR1.1.3). 打开工具-NuGet程序 ...
- 元素类型为 "package" 的内容必须匹配 "(result-types?,interceptors?,default-interceptor-ref?
该错误为struts.xml内配置文件节点顺序错误. package内的元素节点必须按照以下顺序排放: result-types interceptors defau ...
- iPhone safari中Document事件不触发的解决方案 [冒泡]
写了一个下拉菜单,在单击空白地方的时候隐藏. 第一时间就是用$(document).click(function(){ //隐藏代码 }); 各大浏览器都没问题,唯独iPhone上的不会触发事件 ...
- 说说JAVA之网络编程 - 爬虫
首先总结一下学习过程中所需要的类: URL类 - openConnection() URLConnection类 - connection() getInputStream() BufferedRea ...
- web works importScripts
html: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...
- org.springframework.beans.factory.BeanDefinitionStoreException异常
1.下面是我遇到的异常信息: 2017-03-25 18:01:11,322 [localhost-startStop-1][org.springframework.web.context.Conte ...