服务端和客户端证书各种组合下对访问者(浏览器/中间人)的影响

今天本来想研究下nginx下如果获取SSL指纹,但是环境没有装成功

就尝试了下如果不用nginx直接在服务端拿到SSL指纹,
没想到从创建自签名证书到如何开启证书,
以及服务端证书和客户端证书各种组合校验的测试就花了我很长时间。

(注意自签名证书用Rsa,我用Ecc的在asp5.0好像不支持,这里耗了我比较长时间)

所以SSL指纹就下一次在研究吧,有这方面经验的朋友欢迎加我微信交流(文末)!

本文介绍了服务端证书和客户端证书各种组合下,对于访问者(浏览器/中间人)的影响

本文代码基于aspnet5.0,其他语言实现文末有外链可参考

1. 开启服务端SSL

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseKestrel(options =>{options.ListenLocalhost(5002, listenOption =>{//设置证书var httpsOptions = new HttpsConnectionAdapterOptions();var serverCert = new X509Certificate2("server.pfx", "1234");httpsOptions.ServerCertificate = serverCert;listenOption.UseHttps(httpsOptions);});});webBuilder.UseStartup<Startup>();});

server.pfx是自己创建的证书,需要加到根信任中心

  • 浏览器访问https没问题

  • 中间人抓包没问题

  • 客户端HttpClient访问没问题

2. 开启客户端证书验证

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseKestrel(options =>{options.ListenLocalhost(5002, listenOption =>{//设置证书var httpsOptions = new HttpsConnectionAdapterOptions();//设置需要验证客户端正常开始httpsOptions.ClientCertificateMode = ClientCertificateMode.RequireCertificate;//设置需要验证客户端正常结束var serverCert = new X509Certificate2("server.pfx", "1234");httpsOptions.ServerCertificate = serverCert;listenOption.UseHttps(httpsOptions);});});webBuilder.UseStartup<Startup>();});

只需要加一句就搞定

但是注意 如果开启了客户端证书验证。浏览器就无法访问了。
中间人攻击如果没有证书的话 也无法完成!

  • 浏览器无法访问

  • 中间人无证书无法抓包

  • 客户端HttpClient得配置证书才能访问(下面)

3. 客户端用HttpClient加证书可以访问成功


private static async Task<string> GetApiDataAsync()
{try{//注意哈 这里要和服务端用的证书一样才行var cert = new X509Certificate2("server.pfx", "1234");var handler = new HttpClientHandler();handler.ClientCertificates.Add(cert);var client = new HttpClient(handler);var request = new HttpRequestMessage(){RequestUri = new Uri("https://localhost:5002/WeatherForecast"),Method = HttpMethod.Get,};var response = await client.SendAsync(request);if (response.IsSuccessStatusCode){var responseContent = await response.Content.ReadAsStringAsync();return responseContent;}throw new ApplicationException($"Status code: {response.StatusCode}, Error: {response.ReasonPhrase}");}catch (Exception e){throw new ApplicationException($"Exception {e}");}
}

4. 服务端开启客户端证书校验


public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseKestrel(options =>{options.ListenLocalhost(5002, listenOption =>{//设置证书var httpsOptions = new HttpsConnectionAdapterOptions();//设置需要验证客户端正常开始httpsOptions.ClientCertificateMode = ClientCertificateMode.RequireCertificate;//设置需要验证客户端正常结束//设置服务端验证客户端 开启SSL Pinning starthttpsOptions.CheckCertificateRevocation = true;httpsOptions.ClientCertificateValidation +=(certificate2, chain, arg3) =>{//return true;//this is where we verify the thumbprint of a connected client matches the thumbprint we expect//NOTE: this is just a simple example of verifying a client cert.// 2A39D43A8FE2CAE54542C768F61AE79097FAB6F5 这个是我那个证书的 测试的话需要换下return certificate2.Thumbprint.Equals("2A39D43A8FE2CAE54542C768F61AE79097FAB6F5",StringComparison.InvariantCultureIgnoreCase);};               //设置服务端验证客户端 开启SSL Pinning endvar serverCert = new X509Certificate2("server.pfx", "1234");httpsOptions.ServerCertificate = serverCert;listenOption.UseHttps(httpsOptions);});});webBuilder.UseStartup<Startup>();});

注意:服务端开启验证的前提是需要客户端传证书

相比上面一步,更加保证了客户端传的证书的安全性。

而且只要约束了客户端传证书,中间人抓https的包如果拿不到证书是无法抓的!!

  • 浏览器无法访问

  • 中间人无证书无法抓包

  • 客户端HttpClient得配置证书才能访问(同上)

5. 客户端开启SSL Pinning

不需要客户端传证书(不需要服务端强制开启客户端传证书)

只在客户端验证服务端证书。

客户端HttpClient访问增加开启 SSL Pinning


var handler = new HttpClientHandler();
var client = new HttpClient(handler);
//增加开启 SSL Pinning
handler.ServerCertificateCustomValidationCallback = (request, cert, chain, errors) =>
{//2A39D43A8FE2CAE54542C768F61AE79097FAB6F5 这个是我那个证书的 测试的话需要换下return cert.Thumbprint.Equals("2A39D43A8FE2CAE54542C768F61AE79097FAB6F5",StringComparison.CurrentCultureIgnoreCase);
};var request = new HttpRequestMessage()
{RequestUri = new Uri("https://localhost:5002/WeatherForecast"),Method = HttpMethod.Get,
};var response = await client.SendAsync(request);

试下对中间人攻击有没有效果

开启并设置Fiddler代理

handler.Proxy = new WebProxy("127.0.0.1:8888");

如上图,启动中间人攻击后的服务端证书签名变了

  • 浏览器可访问

  • 中间人无证书情况无法抓包

综上
在客户端启动SSL pinning 最简单,成本最小,其他语言都有比较简单的实现

上面演示的证书链只有一条,验证的时候也可以对整个证书链遍历,每个都验证最为稳妥!


不过不能以为客户端开启了SSL Pinning就安全了,因为客户端有Hook(xpose,frida).

SSL指纹有感兴趣的可以加我交流,备注下ssl。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之应用APN、WIFI、GPS定位小例子

转自一个网上项目&#xff0c;由于是例子打包下载&#xff0c;出处不详。例子中自我写入注释。Activity类&#xff1a;package com.maxtech.common;import com.maxtech.common.gps.GpsTask;import com.maxtech.common.gps.GpsTaskCallBack;import com.maxtech.common.gps.GpsTa…

如果科学家封神,会有什么称号?

全世界只有3.14 % 的人关注了数据与算法之美你听说过“天雷真君”吗&#xff1f;你知道“虐猫狂人"吗&#xff1f;其实这两个称号是网友分别送给大科学家富兰克林和薛定谔的。今天让我们看看伟大的科学家们还有一些什么有趣的称号。尺规小王子高斯如来神展傅立叶勾股圣手—…

mac php mcrypt,MacOSX 10.10安装mcrypt详细教程分享

mcrypt 是使用安全技术来交换数据文件加密方法. 这是必需的&#xff0c;例如一些 Magento 的 Web 应用程序,购物车软件或一个 PHP 框架&#xff0c;比如 Laravel. 本教程在 OS X 10.10 Yosemite 经过测试。本指南是真正为用户提供了PHP运行于OSX Yosemite 的5.5.14 版本。其他下…

WPF加载高德地图

WPF开发者QQ群&#xff1a; 340500857 前言 有小伙伴问如何加载高德地图。欢迎转发、分享、点赞&#xff0c;谢谢大家~。 接着上一篇源码中放了我的 BingMap Key 请大家不要滥用&#xff0c;谢谢。也可以自行申请 BingMap Key https://www.bingmapsportal.com/效果预览&#x…

深度学习与机器学习到底什么关系?

最近广州的天气老是变幻无常&#xff0c;前脚还冻得瑟瑟发抖&#xff0c;后脚又开始夏天模式&#xff08;如下图&#xff09;&#xff0c;让小天甚是怀念每天艳阳高照的夏天&#xff0c;虽然热了点但好歹不用担心猝不及防地收到寒风暴雨黄色预警。说到夏天&#xff0c;不得不提…

全选按钮的使用。winfrom程序中,对全选按钮的理解,欢迎拍砖!

最近在做公司项目时&#xff0c;用到了一些单选多选的处理情况。特编辑此文&#xff0c;欢迎批评指正。&#xff08;有图有真相&#xff09; winfrom程序。 首先&#xff0c;需要绑定某些用户&#xff0c;该用于由当前登陆用户获取。 private void BindUser() { …

php 新浪面试题,php程序员面试题(新浪篇)

新浪PHP工程笔试题1. 写一个函数&#xff0c;尽可能高效的&#xff0c;从一个标准 url 里取出文件的扩展名例如: http://www.sina.com.cn/abc/de/fg.php?id1 需要取出 php 或 .php2. 在 HTML 语言中&#xff0c;页面头部的 meta 标记可以用来输出文件的编码格式&#xff0c;以…

理工男一般不浪漫,一浪漫便值很多年

今晚是平安夜接下来就是圣诞元旦小木先祝大家幸福、快乐、健康一年一度“最佳”圣诞元旦礼物奖就要发表了中了直男毒的礼物你们挚爱的女朋友可是不要的哦今天小木就大家扒一扒满满直男的礼物是怎样的&#xff01;Part 1“男票送了我一箱木瓜&#xff0c;说是丰胸疗程&#xff0…

C#序列化与反序列化详解

什么是序列化以及如何实现序列化&#xff1f;序列化是通过将对象转换为字节流&#xff0c;从而存储对象或将对象传输到内存&#xff0c;数据库或文件的过程。主要用途是保存对象的状态&#xff0c;包括对象的数据&#xff0c;以便能够在需要是重建对象。反向过程称为 反序列化。…

云计算涉足网游

随着云计算的发展&#xff0c;网游完全无端化指日可待。 互联网从C/S结构慢慢的过渡到B/S结构&#xff0c;网络游戏也从端游慢慢过渡到页游。比起市场上动辄7G、14G大型端游来说&#xff0c;页游实在是一个太过方便的东西。比如不用频繁的更新客户端&#xff0c;如果是安装在了…

php父子遍历,php无限分类父子追溯方法

php 无限分类之父级分类和子分类的追溯方法&#xff0c;代码片段如下&#xff1a;//返回所有的叶子节点public function scanNodeOfTree($result,$fid){$checkexist false;for ($i0; $iif($fid $result[$i][ParentId]){$checkexist true;$arr . $this->scanNodeOfTree($r…

TLS是如何保障数据传输安全(中间人攻击)

前言前段时间和同事讨论HTTPS的工作原理&#xff0c;当时对这块知识原理掌握还是靠以前看了一些博客介绍&#xff0c;深度不够&#xff0c;正好我这位同事是密码学专业毕业的&#xff0c;结合他密码学角度对tls加解密(DH这块)的阐述&#xff0c;让我对这块原理有了更进一步的理…

除了 Python ,这些语言写的机器学习项目也很牛

全世界只有3.14 % 的人关注了数据与算法之美Python 由于本身的易用优势和强大的工具库储备&#xff0c;成为了在人工智能及其它相关科学领域中最常用的语言之一。尤其是在机器学习&#xff0c;已然是各大项目最偏爱的语言。其实除了 Python &#xff0c;也不乏有开发者用其他语…

php 输入值,php-HTML输入值更改

我有一个PHP更新页面,其中显示一个包含数据库值的文本字段.就像这样,它正在工作,现在,我需要将此更新后的值放回数据库中&#xff01;我已经使用过这样的代码,但是它没有更新&#xff1a;$title$_POST[title];$v_id $_GET[v_id];$sql mysql_query("update vehicles set …

马斯克又要搞事情,不锈钢材质的Space X“星际飞船”正式亮相

全世界只有3.14 % 的人关注了数据与算法之美近日&#xff0c;据美国科技媒体 Teslarati 报道&#xff0c;今年 Space X &#xff08;太空探索技术公司&#xff09;已经开始研发“星际飞船”&#xff08;Starship&#xff09;和 “Super Heavy”&#xff0c;而“星际飞船”则是火…

记一次 .NET 某外贸Web站 内存泄漏分析

一&#xff1a;背景 1. 讲故事上周四有位朋友加wx咨询他的程序内存存在一定程度的泄漏&#xff0c;并且无法被GC回收&#xff0c;最终机器内存耗尽&#xff0c;很尴尬。沟通下来&#xff0c;这位朋友能力还是很不错的&#xff0c;也已经做了初步的dump分析&#xff0c;发现了托…

归档日志 delete input 和delete all input 区别

关于archivelog delete input 和delete all input区别 1 rman的归档位置定义两个 log_archive_dest_1 string LOCATION/oracle/archive log_archive_dest_2 string LOCATION/oracle/archive2/ 2 执行alter system switch lo…

java取整公式,Java取整函数 四舍五入函数-Go语言中文社区

简介Math类中提供了5个与取整相关的函数&#xff0c;如下所示&#xff1a;static double ceil(double a)&#xff1a;天花板函数&#xff0c;返回大于等于a的最小整数(但是以浮点数形式存储)。static double floor(double a)&#xff1a;地板函数&#xff0c;返回小于等于a的最…

这些优质的教育类公众号您知道么,非常实用!

随着新媒体的发展壮大&#xff0c;教育类微信号林林总总数不胜数&#xff0c;官方的、媒体的、学校的……让人眼花缭乱&#xff0c;不知如何选择&#xff0c;今天&#xff0c;小编要向您推荐一些优质且实用的教育类公众号&#xff0c;请大家立即关注。长按二维码&#xff0c;选…