HTTPS学习笔记一----HTTPS的基础理论知识
首先推荐一本书,《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的基础理论知识的更多相关文章
- https学习笔记三----OpenSSL生成root CA及签发证书
在https学习笔记二,已经弄清了数字证书的概念,组成和在https连接过程中,客户端是如何验证服务器端的证书的.这一章,主要介绍下如何使用openssl库来创建key file,以及生成root C ...
- HTML+CSS学习笔记 (7) - CSS样式基本知识
HTML+CSS学习笔记 (7) - CSS样式基本知识 内联式css样式,直接写在现有的HTML标签中 CSS样式可以写在哪些地方呢?从CSS 样式代码插入的形式来看基本可以分为以下3种:内联式.嵌 ...
- https学习笔记二----基础密码学知识和python pycrypto库的介绍使用
在更详细的学习HTTPS之前,我也觉得很有必要学习下HTTPS经常用到的加密编码技术的背景知识.密码学是对报文进行编解码的机制和技巧.可以用来加密数据,比如数据加密常用的AES/ECB/PKCS5Pa ...
- HTTPS学习(一):准备知识
div.example { background-color: rgba(229, 236, 243, 1); color: rgba(0, 0, 0, 1); padding: 0.5em; mar ...
- https 学习笔记
参考 : http://www.cnblogs.com/JimmyZhang/archive/2008/10/02/Cryptograph.html https://blog.csdn.net/Jog ...
- Python基础教程学习笔记:第一章 基础知识
Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入“p ...
- HTTP/HTTPS 学习笔记
超文本传输协议(HyperText Transfer Protocol) 伴随着计算机网络和浏览器的诞生,HTTP1.0也随之而来,处于计算机网络中的应用层,HTTP是建立在TCP协议之上的. HTT ...
- 《图解http协议》之HTTPs学习笔记
对于IP协议,并不陌生.TP协议是TCP/IP协议簇中的核心协议,也是TCP/IP的载体.所有的TCP,UDP,ICMP及IGMP数据都以IP数据报格式传输.IP提供不可靠的,无连接的数据传送服务.I ...
- https学习笔记
HTTPS协议 HTTPS可以认为是HTTP + TLS.HTTP协议大家耳熟能详了,目前大部分WEB应用和网站都是使用HTTP协议传输的.TLS是传输层加密协议,它的前身是SSL协议,最早由nets ...
随机推荐
- 【ML入门系列】(三)监督学习和无监督学习
概述 在机器学习领域,主要有三类不同的学习方法: 监督学习(Supervised learning) 非监督学习(Unsupervised learning) 半监督学习(Semi-supervise ...
- class ObjectOutputStream也是过滤流,使节点流直接获得输出对象。
class ObjectOutputStream也是过滤流,使节点流直接获得输出对象. 最有用的方法:WriteObject(Object b) 用流传输对象称为对象的序列化,但并不使所有的对象都可以 ...
- List接口:(介绍其下的两个实现类:ArrayList和LinkedList)
以下介绍接口: List接口:(介绍其下的两个实现类:ArrayList和LinkedList) ArrayList和数组非常类似,其底层①也用数组组织数据,ArrayList是动态可变数组. ① ...
- Linux 相关术语_002
Linux(Linux is not unix)是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统. 它能运行主要的UNIX工 ...
- JavaScript学习历程03
一闪一闪亮晶晶 <script type="text/javascript"> var nn = Number(prompt('请输入一个1-9的正整数!')); va ...
- OpenGL 获取当前屏幕坐标的三维坐标(gluUnProject使用例子 Qt)
之前使用VS+glut实现了gluUnProject使用例子,用于渲染管道的逆过程,将屏幕坐标转换为opengl三维坐标,本文将尝试使用QT来实现. 代码如下: main.cpp 12345678 ...
- is not in the sudoers file解决方法
用sudo时提示"xxx is not in the sudoers file. This incident will be reported.其中XXX是你的用户名,也就是你的用户名没有权 ...
- fastadmin 使用记录
1.引用静态css文件 参考路径:D:\wwwroot\public\assets\addons\cms\css 静态资源文件基本都放在public目录下引用 引用实例 D:\wwwroot\addo ...
- python 接口自动化测试(五)其他-认证&代理&超时配置
有了前面几节的介绍,基本的接口测试是可以满足了.本节一些其它的高级技巧: 一.认证 1.基本认证: # -*- coding:utf-8 -*- import requests url = " ...
- 更改oracle归档模式路径
1.更改归档路径 在ORACLE10G中,默认的归档路径为$ORACLE_BASE/flash_recovery_area.对于这个路径,ORACLE有一个限制,就是默认只能有2G的空间给归档日志使用 ...