日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

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

發布時間:2023/12/4 HTML 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 服务端和客户端证书各种组合下对访问者(浏览器/中间人)的影响 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天本來想研究下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。


總結

以上是生活随笔為你收集整理的服务端和客户端证书各种组合下对访问者(浏览器/中间人)的影响的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 综合久久五月天 | 一级伦理农村妇女愉情 | 国语对白做受按摩的注意事项 | 亚洲伦理天堂 | 国产欧美日韩精品一区二区三区 | 毛片一区二区三区 | 亚洲黄业 | eeuss鲁丝片一区二区三区 | 在线免费福利视频 | 依人99| 久久久综合av | 黄视频免费看在线 | 国产一二区视频 | 激情四月| 午夜av电影在线观看 | 亚洲一区二区日韩欧美 | 大度亲吻原声视频在线观看 | 99久久精品一区二区三区 | www网站在线观看 | 足交在线观看 | 久久亚州 | 国产女人18毛片水真多18精品 | 草草草在线视频 | 日韩免费小视频 | 日韩欧美在线观看一区 | 视频福利在线观看 | 久久精品黄色片 | 国语久久 | 咪咪av| 国产又大又黑又粗免费视频 | 日韩欧美理论片 | 久久精品国产大片免费观看 | 久久免费在线观看视频 | 精一区二区| 精品在线一区 | 日韩网站视频 | 亚洲日本韩国在线 | 性欧美18一19性猛交 | 国内精品久久久久久久久久 | 亚欧成人精品 | 中文字幕av有码 | 中出在线视频 | 久久99精品国产麻豆婷婷洗澡 | 人人干夜夜操 | 炕上如狼似虎的呻吟声 | 亚洲午夜精品久久久久久app | 欧美在线 | 亚洲欧美日韩专区 | 麻豆av一区二区三区 | 国产视频手机在线观看 | 不卡av片 | 九九综合九九 | 日韩色中色| 国产日韩欧美一二三区 | 在线观看黄av | 成人免费毛片高清视频 | 无码任你躁久久久久久老妇 | 日韩精品中文字幕在线观看 | 日韩人成 | 午夜婷婷网 | www.com久久 | 久久久久国产精品人妻 | 色哟哟精品一区 | 99国产精品久久久久久久久久久 | 久久久久亚洲AV成人网人人小说 | 超碰2021| 国产叼嘿视频在线观看 | 国产夜色视频 | 福利视频亚洲 | 国产精品女同一区二区 | 国产污视频在线观看 | 九色porny自拍视频 | 欧美浮力影院 | 亚洲夜夜爱| 九九精品视频免费 | 亚洲丁香色 | 男ji大巴进入女人的视频 | 91av导航 | 国产成人精品亚洲线观看 | 亚洲久草 | 欧美1区2区3区 | 国产婷婷精品 | 欧美黄色短片 | 国产粉嫩一区二区三区 | 免费成人黄色网址 | 五月天婷婷激情 | 免费看裸体网站视频 | 91视频高清 | 91亚洲国产成人精品性色 | 午夜丰满寂寞少妇精品 | 97人妻精品一区二区 | 黄网站在线免费看 | 国产91在线播放 | 在线观看二区 | 在线观看免费黄色 | 天海翼av | 国产精品88av | 国产精品v亚洲精品v日韩精品 | 好吊视频一二三区 |