zoukankan      html  css  js  c++  java
  • HTTPS协议入门

    HTTPS协议入门

    1. HTTPS出现的背景

    虽然HTPP协议很优秀并且方便,但是不得不正视HTTP协议存在的一些问题:

    • 通信使用明文(不加密),内容可能会被窃听;
    • 不验证通信双方的身份,因此有可能遭遇伪装;
    • 无法证明报文的完整性,所以有可能已遭篡改;

    这些问题不仅在HTTP协议上出现,其他未加密的协议中也会存在这类问题。

    由于这些问题的存在,HTTPS协议就应运而生,HTTPS,超文本传输安全协议,是和SSL(Secure Socket Layer,安全套接层)或者TLS(Transport Layer Security,安全传输层协议)组合使用的,通常HTTP直接和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。

    2. HTTPS的三大功能

    上面提到了HTPP协议的不足,下面说一下HTTPS是如何解决这三个问题的。

    2.1 通信使用明文(不加密),内容可能会被窃听

    在网络上传输信息,本身就是可以被他人截获的,比如通过抓包工具,第三者就可以在同局域网的一台主机,或者路由器或者互联网的任何地方都可能被截获数据。HTPP使用明文传输,相当于你传输的数据完全暴露在了网络上。

    HTTPS传输数据的时候会对通信进行加密,使用SSL建立安全线路之后,就可以在这条线路上进行HTTP通信了。相当于单独建立了一条安全信道。

    2.2 不验证通信双方的身份,因此有可能遭遇伪装

    HTTP协议中的请求和响应不会对通信双方进行确认,也就是说存在“服务器是否就是发送请求中URI真正的主机,返回的响应是否是真的返回到实际提出请求的客户端”等类似问题。并且,由于不存在通信双方的处理步骤,任何人都可以发起请求。可能会出现DOS攻击等问题。

    HTTPS中SSL就可以确认确认通信方,它提供了一种被称为证书的手段,证书由值得信赖的第三方机构颁发,用以证明服务器和客户端是实际存在的,另外伪造证书从技术角度说是异常困难的一件事,所以只要能确认通信方持有的证书就可以判断通信方的真实意图。

    2.3 无法证明报文的完整性,所以有可能已遭篡改

    HTTP协议无法确认客户端发出的请求和服务端接收到的请求是相同的,同样,也无法确认服务端发送的响应和客户端接收的响应是相同的。很容易出现中间人攻击。

    虽然HTTP协议可以使用md5等信息摘要算法保证数据完整性,但是MD5本身都可能被篡改,也就无法保证其安全性。SSL提供了摘要功能。可以保证数据的完整性。

    从HTTPS的功能来看,可以总结为:HTTP+加密+认证+完整性保护=HTTPS。

    3. HTTPS的混合加密机制

    首先先来谈谈两种加密方法:

    • 共享密钥加密:加密和解密使用相同的密钥,但是在通信的时候需要把密钥也一并发送,这样有可能被别人截获;
    • 公开密钥加密:加密和解密使用不同的密钥,服务器提供公开密钥,客户端使用公开密钥对数据进行加密,然后服务器使用私有密钥对密文进行解密,这样就保证密文不会被破解。

    但是使用公开密钥加密方式传输数据比较慢,所以HTTPS结合了两者的优点,使用混合加密机制,首先在交换密钥的时候使用公开密钥加密方式,确认连接后,传输数据使用共享密钥加密方式。

    4. HTTPS使用场景

    当使用HTTPS时,通信会变慢,导致通信变慢的原因有两个,一是网络负载,当使用HTTPS进行通信时,网络负载比HTTP要高2-100倍。而是由于HTTPS每次通信都要加解密,对CPU的消耗也很大。所以一般只有在传输机密信息时使用HTTPS,比如用户密码,银行信息等。

    再有就是使用HTTPS需要支付购买证书的费用,一些机构考虑到这点也可能优先选择HTTP协议。

    参考:

    《图解HTTP》

  • 相关阅读:
    octotree神器 For Github and GitLab 火狐插件
    实用篇如何使用github(本地、远程)满足基本需求
    PPA(Personal Package Archives)简介、兴起、使用
    Sourse Insight使用过程中的常使用功能简介
    Sourse Insight使用教程及常见的问题解决办法
    github 遇到Permanently added the RSA host key for IP address '192.30.252.128' to the list of known hosts问题解决
    二叉查找树的C语言实现(一)
    初识内核链表
    container_of 和 offsetof 宏详解
    用双向链表实现一个栈
  • 原文地址:https://www.cnblogs.com/scuwangjun/p/10022736.html
Copyright © 2011-2022 走看看