https协议分析
一:什么是HTTPS
https全称是超文本传输安全协议,https利用SSL/TLS加密数据包来进行http通信。https开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
通常,HTTP直接和TCP通信,当使用SSL时,则变成了HTTP先和SSL通信,再由SSL和TCP通信 ,如下图所示。

一个安全的网络环境包含以下3个方面:
- 通信内容的保密
- 通信双方身份的真实
- 通信内容的完整
而https的诞生就是为了解决这3个问题。所以可以理解为:HTTP + 加密 + 认证 + 完整性保护 = HTTPS
二:密码学基本概念
https中就是应用了各种密码学技术,保证
1、数字证书
一种文件的名称,好比一个人或者机构的名称,能够证明这个人或者机构的真实性。其中包含的信息,用于实现上述功能。其作用类似于生活中的身份证。最简单的证书包含一个公开秘钥、公钥的数字签名,公钥拥有者的信息。
2、数字签名
对文件加密只是确保了文件的完整性,通过数字签名的技术可以确定发件人的身份。而如何实现发件人的身份不是伪造的呢,简单来说,数字签名(digital signature)是公钥密码的逆应用:用私钥加密消息,用公钥解密消息。
生成签名过程:
一般来说,不直接对消息进行签名,而是对消息的哈希值进行签名,步骤如下。
- 对消息进行哈希计算,得到哈希值
- 利用私钥对哈希值进行加密,生成签名
- 将签名附加在消息后面,一起发送过去
验证签名过程:
- 收到消息后,提取消息中的签名
- 用公钥对签名进行解密,得到哈希值1。
- 对消息中的正文进行哈希计算,得到哈希值2。
- 比较哈希值1和哈希值2,如果相同,则验证成功。
3、对称加密
对称加密又叫做共享秘钥加密,加密和解密使用的是同一秘钥。当传输时也必须把密钥传给对方,这就造成密钥传输的安全问题,如果密钥被窃取,那么加密就变得毫无意义。常见的对称加密算法有DES,AES等。
4、非对称加密
非对称加密又叫做公开秘钥加密,顾名思义,加密的秘钥是公开的。之所以叫非对称加密,是因为秘钥是一对的,分为公钥和私钥。公钥公开给大家,私钥自己保存,任何人都可以通过公钥加密明文,但只有私钥拥有者才可以通过私钥解读公钥加密后的密文。常见的非对称加密又RSA,DH等
安全算法
不使用自己开发的加密算法,而使用没有专利的、安全的、公开的标准加密算法。
说明:
- 当前的专利算法包括但不限于:IDEA。已过专利保护期的加密算法已不再受专利保护;
- 不推荐的加密算法包括:DES、MD5、SHA1、HMAC-MD5、HMAC-SHA1;
- 对称加密算法建议使用:AES;
- 密钥交换算法建议使用:DH;
- 数字签名算法建议使用:SHA1withDSA;
- 非对称算法建议使用:ECC、RSA;
- HASH(哈希)算法建议使用:SHA;
- HMAC(基于哈希的消息验证码)算法建议使用:HMAC-SHA;
- 建议的各算法建议采用如下的加密强度:

三:HTTPS工作流程
https工作流程可以分为3个阶段:
1、认证服务器:客户端确认服务器证书的认证机构是否在受信任的CA机构列表中,从证书中获取服务器的公钥。
2、协商会话秘钥:客户端通过服务器公钥进行通信,协商出会话密码。这个会话秘钥是对称加密的类型,因为非对称加密算法开销计算量大,不适合对大数据加密。另外,会话密钥是随机生成,每次协商都会有不一样的结果,所以安全性也比较高。
3、此时客户端服务器双方都有了本次通讯的会话密钥,之后传输的所有Http数据,都通过会话密钥加密。
四:使用HTTPS的流程
1、使用openssl等工具生成web服务器的私钥key
2、使用openssl等工具,结合key以及服务器的其他信息,生成证书请求csr文件
3、发送csr文件给CA的其中一个机构,支付相应费用,获得服务器证书
4、通过webServer(Nginx等)中配置Http服务
总结:
https就是在http上面加入了ssl/tls协议,保证数据传输的安全性。但由于https比http耗费资源,所以一般比较重要的站点才会用https。
https协议分析的更多相关文章
- TLS握手协议分析与理解——某HTTPS请求流量包分析
https://xz.aliyun.com/t/1039 HTTPS简介 HTTPS,是一种网络安全传输协议,在HTTP的基础上利用SSL/TLS来对数据包进行加密,以提供对网络服务器的身份认证,保护 ...
- Google的Protobuf协议分析
protobuf和thrift类似,也是一个序列化的协议实现,简称PB(下文出现的PB代表protobuf). Github:https://github.com/google/protobuf 上图 ...
- 协议分析TMP
最近闲来有事, 分析了一个非常低端(非常低端的意思是说你不应该对她是否能取代你现有的QQ客户端作任何可能的奢望,她只是一个实验性的东西)的手机QQ的协议, 是手机QQ3.0, 所用到的TCP ...
- PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析
Python黑帽编程1.5 使用Wireshark练习网络协议分析 1.5.0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...
- HTTPS 协议和原理
1 HTTPS 协议概述 HTTPS 可以认为是 HTTP + TLS.HTTP 协议大家耳熟能详了,目前大部分 WEB 应用和网站都是使用 HTTP 协议传输的. TLS 是传输层加密协议,它的前身 ...
- 大型网站的 HTTPS 实践(1):HTTPS 协议和原理
转自:http://op.baidu.com/2015/04/https-s01a01/ 1 前言 百度已经于近日上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS.本文重 ...
- 使用https协议解决掉顽固不化的已解密的登录请求
1.1 已解密的登录请求概述 在应用程序测试过程中,检测到将未加密的登录请求发送到服务器.由于登录过程所用的部分输入字段(例如:用户名.密码.电子邮件地址.社会保险号码,等等)是个人敏感信息,建议通过 ...
- [转载] TLS协议分析 与 现代加密通信协议设计
https://blog.helong.info/blog/2015/09/06/tls-protocol-analysis-and-crypto-protocol-design/?from=time ...
- HTTP 和 HTTPS 协议
HTTP协议是什么? 简单来说,就是一个基于应用层的通信规范:双方要进行通信,大家都要遵守一个规范,这个规范就是HTTP协议. HTTP协议能做什么? 很多人首先一定会想到:浏览网页.没错,浏览网页是 ...
随机推荐
- Net基础篇_学习笔记_第十二天_面向对象继承(命名空间 、值类型和引用类型)
命名空间可以认为类是属于命名空间的. 解决类的重名问题,可以看做类的“文件夹”如果在当前项目中没有这个类的命名空间,需要我们手动的导入这个类所在的命名空间.1).用鼠标去点2).alt+shift+F ...
- windows平台:查看端口占用情况,请杀死端口对应进程PID
//查看 netstat -ano | findstr //杀死 taskkill /f /PID
- 作为IT面试官,我如何考核计算机专业毕业生?作为培训班老师,我又如何提升他们?
我最近几年一直在做技术面试官,除了面试有一定工作经验的社会人员外,有时还会面试在校实习生和刚毕业的大学生.同时,我也在学校里做过兼职讲师,上些政府补贴课程(这些课程有补贴,学生不用出钱),所以我会在不 ...
- tomcat 中无法添加项目等问题的解决方案
博客地址:http://www.moonxy.com 一.前言 今天新建了一个 maven 项目,添加程序文件之后,发现无法添加项目,然后修改配置,将应用添加到了 tomcat,启动时又报错,解决出现 ...
- cmd中添加目录md
md 创建目录. MKDIR [drive:]pathMD [drive:]path 如果命令扩展被启用,MKDIR 会如下改变: 如果需要,MKDIR 会在路径中创建中级目录.例如: 假设 \a 不 ...
- 新手学习FFmpeg - 调用API完成两个视频的任意合并
本次尝试在视频A中的任意位置插入视频B. 在上一篇中,我们通过调整PTS可以实现视频的加减速.这只是对同一个视频的调转,本次我们尝试对多个视频进行合并处理. Concat如何运行 ffmpeg提供了一 ...
- 初学Spring的感觉
1.使用接口 不同的类实现同一接口后都会变成同一类型的类. spring作业1的思路 lab1: 建立一个有一个输出方法的接口类|并建一个英语类和一个数学类实现该接口. 这两个实现类都重写了那 ...
- 搭建maven本地仓库,idea应用本地maven仓库
提环境: 安装好tomcat.maven.jdk.idea. 打开maven安装目录,在目录下新建 maven仓库文件夹(名子随便): 打开conf\setting.xml 加入<localRe ...
- Python学习-while循环&逻辑运算符
一.while循环,continue.break语句在while循环中的使用 1.while循环语句: while 条件: 代码块 执行过程:判断条件是否为真,如果为真,执行代码块,继续下次循 ...
- mybatis list条件判断
<if test="userIds != null and userIds.size > 0"> AND user_id in <foreach colle ...