`
youyu4
  • 浏览: 440193 次
社区版块
存档分类
最新评论

关于HTTP和HTTPS的安全问题

 
阅读更多

关于HTTP和HTTPS的安全问题

 

 

普通HTTP请求存在的问题

 

      HTTP 本身是明文传输的,没有经过任何安全处理。例如用户在百度搜索了一个关键字,比如“苹果手机”,中间者完全能够查看到这个信息,并且有可能打电话过来骚扰用户。也有一些用户投诉使用百度时,发现首页或者结果页面浮了一个很长很大的广告,这也肯定是中间者往页面插的广告内容。如果劫持技术比较低劣的话,用户甚至无法访问百度。

 

      这里提到的中间者主要指一些网络节点,是用户数据在浏览器和百度服务器中间传输必须要经过的节点。比如 WIFI 热点,路由器,防火墙,反向代理,缓存服务器等。

 

      在 HTTP 协议下,中间者可以随意嗅探用户搜索内容,窃取隐私甚至篡改网页。不过 HTTPS 是这些劫持行为的克星,能够完全有效地防御。

 

      所以,就有了HTTPS,使用 HTTPS 协议主要是为了保护用户隐私,防止流量劫持。

 

 

 

 

 

解决方法

 

  • 使用HTTPS(方便,不过要申请证书)
  • 自己对数据进行加密,讲明文传输改为密文传输(麻烦,因为要自行进行加密解密,步骤多,容易错)
  • HTTPS + 自己对数据加密(这是最麻烦,但是比较安全)

 

 

 

 

HTTPS的特点

 

  • 内容加密。浏览器到百度服务器的内容都是以加密形式传输,中间者无法直接查看原始内容。
  • 身份认证。保证用户访问的是百度服务,即使被 DNS 劫持到了第三方站点,也会提醒用户没有访问百度服务,有可能被劫持
  • 数据完整性。防止内容被第三方冒充或者篡改。

 

 

 

 

HTTPS原理

 



 

流程如下:

    1. 客户端发起一个https的请求,把自身支持的一系列Cipher Suite(密钥算法套件,简称Cipher)发送给服务端。

 

 

    2. 服务端存在一个公匙和私匙。

 

 

    3. 服务端,接收到客户端所有的Cipher后与自身支持的对比,如果不支持则连接断开,反之则会从中选出一种加密算法和HASH算法以证书的形式返回给客户端 证书中还包含了 公钥 颁证机构 网址 失效日期等等。

 

 

    4. 客户端收到服务端响应后会做以下几件事

 

      (1)验证证书的合法性

 

       颁发证书的机构是否合法与是否过期,证书中包含的网站地址是否与正在访问的地址一致等,证书验证通过后,在浏览器的地址栏会加上一把小锁(每家浏览器验证通过后的提示不一样 不做讨论)。

 

     (2)生成随机密码

 

       如果证书验证通过,或者用户接受了不授信的证书,此时浏览器会生成一串随机数,然后用证书中的公钥加密。 

 

      (3)HASH握手信息

 

       用最开始约定好的HASH方式,把握手消息取HASH值,  然后用 随机数加密 “握手消息+握手消息HASH值(签名)”  并一起发送给服务端。

 

       在这里之所以要取握手消息的HASH值,主要是把握手消息做一个签名,用于验证握手消息在传输过程中没有被篡改过。

 

 

    5. 客户端将加密后的内容传给服务端

 

 

    6. 服务端拿到客户端传来的密文,用自己的私钥来解密握手消息取出随机数密码,再用随机数密码 解密 握手消息与HASH值,并与传过来的HASH值做对比确认是否一致。

 

 

    7. 然后用随机密码加密一段握手消息(握手消息+握手消息的HASH值 )给客户端。

 

 

    8. 客户端用随机数解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。

 

       因为这串密钥只有客户端和服务端知道,所以即使中间请求被拦截也是没法解密数据的,以此保证了通信的安全

 

 

 

 

常用加密解密算法

 

  • 非对称加密算法:RSA,DSA/DSS     在客户端与服务端相互验证的过程中用的是对称加密 
  • 对称加密算法:AES,RC4,3DES     客户端与服务端相互验证通过后,以随机数作为密钥时,就是对称加密
  • HASH算法:MD5,SHA1,SHA256  在确认握手消息没有被篡改时 

 

 

 

如何抓取HTTPS的请求数据

 

      当站点由HTTP转成HTTPS后是更安全了,但是有时候要看线上的请求数据解决问题时却麻烦了,因为是HTTPS的请求,你就算拦截到了那也是加密的数据,没有任何意义。

 

抓取流程如下:

http://www.cnblogs.com/zery/p/5164795.html

 

 

 

 

HTTPS是否真的足够安全

 

HTTPS是安全的,因为有证书和加密机制做保障!

 

但是,有个可怕的方法叫“ DNS劫持 ”,简单的说黑客为了绕过HTTPS,采用了SSL层剥离的技术,黑客阻止用户和使用HTTPS请求的网站之间建立SSL连接,使用户和代理服务器(攻击者所控制的服务器)之间使用了未加密的HTTP通信。

 

工作流程如下图:



 

 工作原理

 

     1. 客户端发送域名请求给 dns

 

     2. dns通过遍历查询dns数据库,来解析此域名对应的ip,然后反馈至浏览器客户端

 

     3. 客户端通过ip与对方建立数据连接

 

     4. 问题就出在DNS服务器上,如果用户访问的DNS服务器是黑客的,然后返回的ip也是黑客预先准备好的服务器,那么用户信息就会泄露

 

 

 

 

预防DNS劫持的方法

 

    1. 从用户的角度,防止DNS劫持

 

       (1)手动设置DNS服务器,如果是自动的就百度一下自己的DNS ip,如果是国外的就要警惕了

 

       (2)修改路由器Web登陆密码,不要用过于简单的密码,也能预防被入侵

 

       (3)注意URL是否被重写了,是否是https,是否有一把小锁

 

 

    2. 服务端通过流程去预防,不要想着用户有多聪明,会上面的配置,所以要加入自己的流程来预防。

 

        流程如下(还是需要HTTPS):

        模仿https的流程,可以看草稿箱

 

    这个流程跟HTTPS的验证流程很相似,也存在验证效果,就是因为做多了几部验证的操作,让黑客无法猜测到如何访问服务器的API,即使入侵了用户的电脑,窃取到用户的账号密码,也无法登陆系统窃取用户钱财,是跟黑客一起讨论后得出的结果。

  

 

 

中间人攻击

 

       除了DNS劫持,黑客还有其他方法能够截取用户信息,如下:

 

  • DNS劫持:黑客黑了被攻击人的DNS服务器,然后每次请求都会先转到黑客的服务器后,再转到真正的服务器
  • 会话劫持:我们可以把会话劫持攻击分为两种类型:1)中间人攻击(Man In The Middle,简称MITM),2)注射式攻击(Injection);并且还可以把会话劫持攻击分为两种形式:1)被动劫持,2)主动劫持;被动劫持实际上就是在后台监视双方会话的数据流,丛中获得敏感数据;而主动劫持则是将会话当中的某一台主机“踢”下线,然后由攻击者取代并接管会话,这种攻击方法危害非常大,攻击者可以做很多事情
  • 代理服务器

 

 

注射式攻击

 

这种方式的会话劫持比中间人攻击实现起来简单一些,它不会改变会话双方的通讯流,而是在双方正常的通讯流插入恶意数据。在注射式攻击中,需要实现两种技术:

 

  • IP欺骗
  • 预测TCP序列号

       如果是UDP协议,只需伪造IP地址,然后发送过去就可以了,因为UDP没有所谓的TCP三次握手,但基于UDP的应用协议有流控机制,所以也要做一些额外的工作。对于IP欺骗,有两种情况需要用到:1)隐藏自己的IP地址;2)利用两台机器之间的信任关系实施入侵。在Unix/Linux平台上,可以直接使用Socket构造IP包,在IP头中填上虚假的IP地址,但需要root权限;在Windows平台上,不能使用Winsock,需要使用Winpacp(也可以使用Libnet)。例如在Linux系统,首先打开一个Raw Socket(原始套接字),然后自己编写IP头及其他数据。

 

 
参考
  • 大小: 73 KB
  • 大小: 539.1 KB
分享到:
评论

相关推荐

    Nginx同时支持Http和Https的配置详解

    下面列举一个配置同时支持Http和Https的功能。 需要注意的是:既然选择使用Https,就是为了保证通信安全,那么就没必要再用Http进行通信了。在URL中还支持Http的方式,主要是为了用户不知道网站支持Https,还是使用...

    Nginx配置http转https以及https访问http静态资源.docx

    Nginx配置http转https以及https访问http静态资源 Nginx是一款流行的开源Web服务器软件,常用于服务器端的反向代理、负载均衡、媒体流等功能。本文档将详细介绍如何使用Nginx配置http转https,以及https访问http静态...

    不安全的http方法、CSRF等漏洞修复问题

    不安全的 HTTP 方法、CSRF 等漏洞修复问题 在本文中,我们将讨论不安全的 HTTP 方法、CSRF 漏洞等问题的修复...通过以上措施,我们可以修复不安全的 HTTP 方法、CSRF 漏洞等问题,保护我们的网站和服务器免受攻击。

    详解nginx同一端口监听多个域名和同时监听http与https

    其次,关于Nginx同时监听HTTP和HTTPS。在网络安全日益受到重视的今天,HTTPS已经成为网站的标配。Nginx通过SSL/TLS模块提供了对HTTPS的原生支持。要使Nginx能够同时监听HTTP和HTTPS,我们需要在server块中同时使用...

    http,https获取数据

    在IT行业中,HTTP(超文本传输协议)和HTTPS(安全超文本传输协议)是网络通信的基础,用于在互联网上传输数据。HTTP是最广泛使用的应用层协议,而HTTPS是在HTTP之上添加了SSL/TLS加密层,提供了更为安全的数据传输...

    使用JSONP完成HTTP和HTTPS之间的跨域访问

    ### 使用JSONP完成HTTP和HTTPS之间的跨域访问 在现代Web开发中,跨域问题是一项常见挑战,尤其是在涉及不同协议(如HTTP与HTTPS)的数据交互时。本文将深入探讨如何利用JSONP(JSON with Padding)技术来实现HTTP与...

    C# HTTP/Https 请求demo

    总的来说,“C# HTTP/Https 请求demo”项目旨在演示如何在C#应用程序中安全地与HTTP和HTTPS服务进行通信,通过GET和POST请求获取或提交数据。理解并掌握这些知识点对于开发任何涉及Web服务交互的C#应用都是非常重要...

    Spring Boot实现Undertow服务器同时支持HTTP2、HTTPS的方法

    首先,我们需要了解什么是HTTP2和HTTPS,以及它们的优点和缺点,然后我们将学习如何使用Spring Boot实现Undertow服务器同时支持HTTP2和HTTPS。 什么是HTTP2? HTTP2是HTTP协议自1999年HTTP1.1发布后的首个更新,...

    c#使用Socket发送HTTP/HTTPS请求的实现代码

    HTTP/HTTPS是两种常用的网络协议,分别用于超文本传输和安全超文本传输。HTTP是基于TCP/IP协议的无状态请求/响应式协议,而HTTPS则是在HTTP基础上添加了SSL/TLS加密层。使用Socket发送HTTP/HTTPS请求可以实现对请求...

    详解android 用webview加载网页(https和http)

    然而,在加载 HTTPS 和 HTTP 网页时,WebView 可能会出现一些问题,本文将详细介绍这两个错误的解决方法。 错误一:加载 HTTPS 请求的网页时,WebView 变成空白页 在 Android 中,当 WebView 加载 HTTPS 请求的...

    http和https的区别以及https使用到的安全技术.docx

    在HTTP的基础上,HTTPS引入了加密处理、身份验证和完整性保护,以确保数据在传输过程中的安全性和隐私性。 2. HTTPS 的核心组件:SSL/TLS协议 SSL(Secure Sockets Layer)和TLS(Transport Layer Security)协议是...

    C++http所有接口和https post和DownLoad接口

    在C++编程中,HTTP(超文本传输协议)和HTTPS(安全超文本传输协议)是两种广泛用于网络通信的协议。HTTP主要用于传输Web内容,而HTTPS则在其基础上添加了SSL/TLS加密层,以确保数据的安全传输。在这个项目中,我们...

    unity Http请求插件,支持https

    - 提供详细的日志系统,方便调试和问题排查。 4. **使用Best HTTP/2的流程**: - 首先,需要在Unity Asset Store下载并导入`Best HTTP2_v2.2.0.unitypackage`到项目中。 - 引入库后,创建一个`HTTPRequest`对象...

    HTTP使用WEBLOGIC修改为HTTPS协议

    为了解决这个问题,通常会将HTTP升级为HTTPS(超文本传输安全协议),它通过SSL/TLS协议提供加密处理和身份认证。在这个场景下,我们将探讨如何使用WebLogic,一个由Oracle公司提供的Java应用服务器,来将HTTP转换为...

    Web应用安全:HTTP协议习题.docx

    本资源摘要信息主要涵盖了Web应用安全中的HTTP协议习题,涉及到HTTP请求和响应模型、HTTP请求方法、HTTP消息类型、HTTP状态码、Cookie安全隐患、URL编码、HTTPS访问过程、Cookie的作用等知识点。 一、HTTP请求和...

    http和https的区别?.md

    HTTP和HTTPS在安全性、资源消耗、端口、加密机制、证书、成本、适用场景、用户体验、技术架构、兼容性、代理和缓存、调试和排查问题、跨域资源共享以及技术演进、SEO以及未来发展趋势等方面都存在明显的区别。...

    pb9 通过http、https协议post

    标题中的“pb9 通过http、https协议post”指的是使用...总之,PB9通过HTTP和HTTPS协议进行POST请求涉及到网络通信、数据序列化和反序列化等多个方面,理解这些概念和技术对于进行高效、安全的跨平台数据交换至关重要。

    java发送http/https请求(get/post)代码

    HTTP(超文本传输协议)是一种用于分发超媒体信息的应用层协议,而HTTPS(超文本传输安全协议)是HTTP的安全版本,通过SSL/TLS协议提供加密处理、服务器身份验证和消息完整性检查,确保数据在传输过程中不被窃取或...

    HTTP与HTTPS:网络通信的安全之旅.zip

    对于网页设计师和开发者来说,理解HTTP和HTTPS的区别,以及如何安全地迁移到HTTPS,是至关重要的。 HTTPS不仅保护了用户的数据安全,也提升了网站的信誉和搜索引擎排名。虽然HTTPS可能会带来一些额外的性能开销,但...

Global site tag (gtag.js) - Google Analytics