首先推荐一本书,《HTTP权威指南》我就是看这本书入门的,对http协议有了更好的理解,学习https的理论知识我认为需要了解以下几点,需要一步步的深入学习:

1、HTTPS的基本概念?

2、HTTPS和HTTP的差别?HTTP + 数据加密技术 =HTTPS ?HTTPS 所谓的安全是指哪里安全?

3、HTTPS 的详细交互过程?

4、基础的密码学知识学习:数字加密,对称密钥,非对称密钥,数字签名,数字证书的基本概念。

5、使用openssl怎么制造自签证书?

6、实现简单的https的客户端和服务器端(python版本)

7、利用wireshake抓包进一步分析HTTPS协议

8、实际项目开发过程中遇到的问题总结

其中1-3个点,放在本笔记中,4放在同系列学习笔记二下;5放在同系列学习笔记三下;6放在同系列学习笔记四下;7放在同系列学习笔记五下

一、HTTPS的基本概念

HTTPS 是最流行的HTTP 安全形式。它是由网景公司首创的,所有主要的浏览器和服务器都支持此协议。HTTPS 的URL 以https://,而不是http:// 开头,据此就可以分辨某个Web 页面是通过HTTPS 而不是HTTP 访问的。

HTTPS = HTTP + SSL(TLS),HTTPS 就是在安全的传输层上发送的HTTP。如下图所示:HTTPS 没有将未加密的HTTP 报文发送给TCP,它在将HTTP 报文发送给TCP 之前,先将其发送给了一个安全层,对其进行加密。现在,HTTP 安全层是通过SSL 及其现代替代协议TLS 来实现的。我们遵循常见的用法,用术语SSL 来表示SSL 或者TLS。

二、HTTPS与HTTP的区别

HTTP + 业务数据加密技术 ≠ HTTPS ;因为 HTTPS = HTTP + SSL(TLS),SSL  ≠ 业务数据加密技术;SSL是安全层,建立SSL隧道需要做隧道认证,至少要完成单向认证(服务器认证)或者双向认证,之后数据在传输的过程中都进行了加密处理;通常HTTP使用的在业务层做的数据字段的加密,是业务数据的加密,传输的过程中是没有加密的;而HTTPS的加密是指传输层的加密。HTTPS跟HTTP相比,有以下几个明显的优点:

• 服务器认证(客户端知道它们是在与真正的而不是伪造的服务器通话);
         • 客户端认证(服务器知道它们是在与真正的而不是伪造的客户端通话),通常现在web服务,不需要做客户端认证,只需要做服务器认证;
         • 完整性(客户端和服务器的数据不会被修改),因为整个传输过程是加密的;
         • 加密(客户端和服务器的对话是私密的,无需担心被窃听),使用wireshake监听HTTPS端口会捕获不到数据。
         • 效率(一个运行的足够快的算法,以便低端的客户端和服务器使用),如果使用HTTP+特别复杂的数据加密技术来试图替代HTTPS,交互的双方在加解密的过程会消耗大量的性能,性能下降特别明显。
         • 普适性(基本上所有的客户端和服务器都支持这些协议)。
         • 管理的可扩展性(在任何地方的任何人都可以立即进行安全通信)。
         • 适应性(能够支持当前最知名的安全方法)。
         • 在社会上的可行性(满足社会的政治文化需要)。

三 、HTTPS的交互过程

1、历程一:利用非对称加密传输数据, HTTP + 非对称加密技术

采用HTTP协议,利用非对称加密RSA技术对数据进行加密(RSA 算法自身,甚至RSA 实现的源代码,破解代码找到相应的私有密钥的难度仍相当于对一个极大的数进行质因数分解的困难程度,这种计算被认为是所有计算机科学中最难的问题之一)

只要服务器端保存好私钥,这样看来数据的传输铁定是没问题的,但是这还有一个很大的风险,如果黑客假冒自己是服务器端,把客户端的公钥替换成跟黑客服务器匹配的一对公钥,客户端会在不知情的情况下,与黑客服务器进行交互。

2、历程二:签名证书 + SSL 加密,验证服务器身份,加密传输通道,所有的通信数据在应用层下加密传输,保证传输层安全。HTTPS

交互过程如上图所示,详细的描述了在简历TCP请求后,SSL握手的过程,整个HTTPS的交互过程大致如下:

第一步:1-3 服务器端生成一个证书请求,服务器向权威的CA机构申请证书,一般是把公钥给CA进行加密生成带CA签名的证书。

第二步:4 如果CA是权威的机构,一般情况下浏览器会报错CA的根证书,如果是自签,则需要客户端主动加载或者选择信任服务器发来的证书。

第三步:5 建立底层socket服务,完成TCP的三次握手。

第四步:6 建立传输层的SSL握手,具体又可描述为:

A :  6.0-6.1 客户端发起clent hello 请求:将自己支持的一套加密规则、以及一个随机数(Random_C)发送给服务器。

B :  6.2-6.3 服务器响应server hello :服务器根据自己支持的加密规则,从客户端发来的请求中选出一组加密算法与HASH算法,生成随机数(Random_S),并将自己的身份信息以证书(CA)的形式发回给浏览器。

C:   6.4-6.5 客户端接到服务器的初步响应后做四件事情,然后把数据发送给服务器端:

(1)证书校验: 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等)。

                 (2)生成密码:浏览器会生成一串随机数的密码(Pre_master),并用CA证书里的公钥加密(enc_pre_master),用于传给服务器。

(3)计算协商密钥:
                         此时客户端已经获取全部的计算协商密钥需要的信息:两个明文随机数 Random_C 和 Random_S 与自己计算产生的 Pre-master,计算得到协商密钥enc_key。enc_key=Fuc(random_C, random_S, Pre-Master)

                 
(4)生成握手信息:使用约定好的HASH计算握手消息,并使用协商密钥enc_key及约定好的算法对消息进行加密。

D:   6.6-6.7 服务器端接收到客户端发来的SSL握手信息后,做以下3件事:
                 (1)私钥解密:使用自己的私钥从接收到的enc_pre_master中解密取出密码Pre_master。

(2)计算协商密钥:此时服务器已经获取全部的计算协商密钥需要的信息:两个明文随机数 Random_C 和 Random_S 与Pre-master,计算得到协商密钥enc_key。enc_key=Fuc(random_C, random_S, Pre-Master)

(3)解密握手消息:使用协商密钥enc_key解密客户端发来的握手消息,并验证HASH是否与客户端发来的一致。
                  (4)生成握手消息使用协商密钥enc_key及约定好的算法加密一段握手消息,发送给客户端。

第五步: 7 正常加密通信
                   握手成功之后,所有的通信数据在应用层下都将由之前协商密钥enc_key及约定好的算法进行加密解密。

HTTPS学习笔记一----HTTPS的基础理论知识的更多相关文章

  1. https学习笔记三----OpenSSL生成root CA及签发证书

    在https学习笔记二,已经弄清了数字证书的概念,组成和在https连接过程中,客户端是如何验证服务器端的证书的.这一章,主要介绍下如何使用openssl库来创建key file,以及生成root C ...

  2. HTML+CSS学习笔记 (7) - CSS样式基本知识

    HTML+CSS学习笔记 (7) - CSS样式基本知识 内联式css样式,直接写在现有的HTML标签中 CSS样式可以写在哪些地方呢?从CSS 样式代码插入的形式来看基本可以分为以下3种:内联式.嵌 ...

  3. https学习笔记二----基础密码学知识和python pycrypto库的介绍使用

    在更详细的学习HTTPS之前,我也觉得很有必要学习下HTTPS经常用到的加密编码技术的背景知识.密码学是对报文进行编解码的机制和技巧.可以用来加密数据,比如数据加密常用的AES/ECB/PKCS5Pa ...

  4. HTTPS学习(一):准备知识

    div.example { background-color: rgba(229, 236, 243, 1); color: rgba(0, 0, 0, 1); padding: 0.5em; mar ...

  5. https 学习笔记

    参考 : http://www.cnblogs.com/JimmyZhang/archive/2008/10/02/Cryptograph.html https://blog.csdn.net/Jog ...

  6. Python基础教程学习笔记:第一章 基础知识

    Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入“p ...

  7. HTTP/HTTPS 学习笔记

    超文本传输协议(HyperText Transfer Protocol) 伴随着计算机网络和浏览器的诞生,HTTP1.0也随之而来,处于计算机网络中的应用层,HTTP是建立在TCP协议之上的. HTT ...

  8. 《图解http协议》之HTTPs学习笔记

    对于IP协议,并不陌生.TP协议是TCP/IP协议簇中的核心协议,也是TCP/IP的载体.所有的TCP,UDP,ICMP及IGMP数据都以IP数据报格式传输.IP提供不可靠的,无连接的数据传送服务.I ...

  9. https学习笔记

    HTTPS协议 HTTPS可以认为是HTTP + TLS.HTTP协议大家耳熟能详了,目前大部分WEB应用和网站都是使用HTTP协议传输的.TLS是传输层加密协议,它的前身是SSL协议,最早由nets ...

随机推荐

  1. Vue:生命周期

    一.什么是vue的生命周期 Vue中的生命周期是指组件从创建到销毁的一系列过程.看下面这张官方文档的图: 从图片中可以看出Vue的整个生命周期包括8个状态,按照先后顺序分别为: beforeCreat ...

  2. application.properties详解 --springBoot配置文件【转载】

    # spring boot application.properties配置的各个属性详解 # 该示例文件作为标准提供.(官方文档 翻译过来的) # 还是花了些功夫翻译,各位如果转发,请留下本文地址, ...

  3. 东南亚 SAP 实施 马来西亚税收在SAP的设计和实现

    马来西亚属于中等收入国家,现行税种主要有: 公司所得税.个人所得税.不动产利得税.石油所得税.销售税.合同税.暴利税.服务税和关税等. (一)主要税种1.公司所得税 ⑴ 纳税人 公司所得税的纳税人分为 ...

  4. 一文弄懂神经网络中的反向传播法(Backpropagation algorithm)

    最近在看深度学习的东西,一开始看的吴恩达的UFLDL教程,有中文版就直接看了,后来发现有些地方总是不是很明确,又去看英文版,然后又找了些资料看,才发现,中文版的译者在翻译的时候会对省略的公式推导过程进 ...

  5. github 开源 代码 学习 集合(转载)

    一个支持多种item类型的recycleView依赖注入库 1.通过注解的方式方便的把ViewHolder注入到recycleView中. 2.去除findViewByID等冗余操作. 3.去除编写a ...

  6. java基础---->java8中的函数式接口

    这里面简单的讲一下java8中的函数式接口,Function.Consumer.Predicate和Supplier. 函数式接口例子 一.Function:接受参数,有返回参数 package co ...

  7. 最新版本sublime text3注册码

    TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA12C0 A37081C5 D03164 ...

  8. 11.8Django中的组件content_type

    2018-11-8 18:59:11 在Django中已经有一个contenttype这个组件,并且在python manage.py makemigrations 和migrate的时候,一起在数据 ...

  9. 9、BOM (浏览器对象模型)

    1.认识BOM js 三个部分: 1.ECMAScript标准 ECMA5 ECMA6 2.BOM Browser Object Model 浏览器对象模型 3.DOM 文档对象类型 window对象 ...

  10. Coffee and Coursework (Hard Version)

    Coffee and Coursework (Hard Version) time limit per test 2.5 seconds memory limit per test 256 megab ...