HPPTS SSL
https加密、解密、及验证过程如下图:
HTTPS怎么实现安全传输的?
建立安全传输
HTTPS中, 客户端首先打开一条到WEB服务器443端口的连接。 一旦建立了TCP连接
,客户端和服务器就会初始化SSL层,对加密参数进行沟通,并交换密钥。
握手完成后,SSL初始化就完成了,客户端就可以将请求报文发送给安全层了。
重点 SSL握手
发送已加密的HTTP报文之前,客户端和服务器要进行一次SSL握手,这个握手过程中,他们完成:
- 客户端发送列出客户端密码能力的客户端信息,比如SSL的版本,客户端支持的密钥对和客户端支持的hash方法(压缩方法)。 client_hello
- 服务器响应,服务器选择一个两端都了解的密钥。和服务器的hash方法。 server_hello
- 服务器发送SSL数字证书 X.509,等待客户端响应
- 一旦接受到,客户端将验证服务器的SSL数字证书的有效性。 服务器也可以请求客户端的SSL证书(SSL支持双向)
- 一旦校验通过,客户端就回随机生成一个用于后面通信的“对称密码”pre_master_secret,用服务器的公钥加密。然后发送给服务器。
- 服务端用私有密钥解密加密后的随机数据并协商暗号
得到pre_master_secret,然后双方利用这个协商得到master_secret。 这个是为了保证数据的安全。 - 服务端跟客户端利用mastersecret产生真正的sessionkey,这是一个对称加密的key。 然后握手结束。
选择一个两端都了解的密码
对两端的身份进行认证。
生成临时的会话密钥,加密信道
其实还有SSL双向握手,这里就不阐述了。
那么SSL/TLS协议的基本原理就是,客户端获取服务器的公钥,加密信息以后传送给服务器,然后服务器使用私钥解密。这个方案有两个问题。
服务器传输公钥的时候,是明文的,第三方可以篡改。
RSA加密的计算量较大,如果每次通信都使用RSA加密的话,会对性能产生负担。
针对第一个问题,我们需要一个办法来保证服务器传输的公钥确实是服务器的,而不是第三方的。这个时候,我们需要使用数字证书。数字证书由权威机构(CA, Certificate Authority)颁发,里面包含有服务器的公钥,证书文件使用CA私钥进行加密。当客户端与服务器建立加密通信的时候,服务器不再返回公钥,而是返回他的数字证书。客户端拿到证书,使用对应的CA的公钥解密,然后获取到服务器的公钥。这里有一个问题,客户端怎么拿到CA的公钥呢?如果还是去CA服务器获取的话,那么我们又会回到问题的原点即怎样保证CA公钥不被人篡改。因此,大部分浏览器中,权威CA的公钥都是内置的,不需要去获取。这就保证了CA公钥的正确性。第三方没有办法伪造证书,因为第三方没有CA的私钥(当然,CA被入侵的例子的也是有的,技术永远解决不了人的问题)。
针对第二个问题,SSL/TLS协议在通信过程中,并不是使用RSA加密,而是使用对称加密,对称加密的密钥(对话密钥)由双方协商生成。
因此,SSL/TLS协议的基本流程如下:
客户端索取服务器的数字证书,从而获得服务器公钥
双方协商生成对话密钥
使用对话密钥进行加密通信
具体流程
根据上面的论述,SSL/TLS协议的核心便是怎样安全的生成一个对话密钥来加密之后的通信。这个过程称之为握手。
握手一共有四次请求,注意,这些请求都是明文的(也没法加密)。
客户端请求(ClientHello)
首先,客户端(通常是浏览器)先向服务器发送加密请求,这一步叫做ClientHello。 请求携带以下信息:
1. 客户端支持的协议版本(这是为了和服务器协商使用什么版本的SSL/TLS进行通信)
2. 客户端生成的一个随机数n1
3. 客户端支持的加密方法,比如RSA(这是为了和服务器协商使用什么加密方法)
服务器响应(ServerHello)
服务器收到客户端请求之后,向客户端发送响应,这一步叫做ServerHello。 响应携带以下信息:
1. 确认通信使用的SSL/TLS版本
2. 服务器生成的一个随机数n2
3. 服务器的数字证书
4. 确认加密方法,比如RSA
客户端回应
客户端收到浏览器的响应后,首先验证服务器的证书时候有效。如果证书不是由权威结构颁发(比如12306),证书包含的域名和实际域名不一致或者证书已经过期,那么浏览器会警告用户,由用户决定是否继续访问。
如果证书没有问题,客户端便会从证书中取出服务器的公钥,然后发送一个请求,携带以下信息。
1. 一个随机数n3,这个随机数用服务器公钥加密,防止被窃听
2. 编码改变通知,表示之后所有的信息都将会使用双方商定的加密方法和密钥发送
3. 客户端握手结束通知,表示客户端的握手阶段已经结束
客户端此时有三个随机数,n1,n2,n3,根据这个三个随机数,客户端使用一定的算法生成通信所需的对话密钥。
服务器最后响应
服务器收到客户端的随机数之后,使用私钥将其解密,这时,服务器也拥有了n1,n2,n3这三个随机数,服务器便可以生成和客户端一致的对话密钥。然后向客户端发送最后的响应。信息如下:
1. 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
2. 服务器握手结束通知,表示服务器端的握手阶段已经结束
到了这里,客户端和服务器就可以使用对话密钥加密之后所有的通信过程。第三方无法窃听,都是乱码看不懂。也无法篡改,SSL使用MAC(Message authentication code)来校验信息。更无法冒充,因为没有对话密钥。
HPPTS SSL的更多相关文章
- APP本地服务安全测试
一.安全测试基本分类: 1.系统安全 系统加固 安全加固:比如linux中关闭telnet端口,修改ssh端口 检测一些不必要的服务(需要卸载一个ping)--保证系统的最小集 app安全加固:加一层 ...
- TLS就是SSL的升级版+网络安全——一图看懂HTTPS建立过程——本质上就是引入第三方监管,web服务器需要先生成公钥和私钥,去CA申请,https通信时候浏览器会去CA校验CA证书的有效性
起初是因为HTTP在传输数据时使用的是明文(虽然说POST提交的数据时放在报体里看不到的,但是还是可以通过抓包工具窃取到)是不安全的,为了解决这一隐患网景公司推出了SSL安全套接字协议层,SSL是基于 ...
- Charles的HTTPS抓包方法及原理,下载安装ssl/https证书
转自:https://zhubangbang.com/charles-https-packet-capture-method-and-principle.html 本文的Charles,适应windo ...
- SSL与TLS的区别
SSL(Secure Socket Layer 安全套接层)是基于HTTPS下的一个协议加密层,最初是由网景公司(Netscape)研发,后被IETF(The Internet Engineering ...
- httpclient信任所有证书解决SSLException:Unrecognized SSL message,plaintext connection
在使用 HttpClient 工具调用第三方 Http 接口时报错 javax.net.ssl.SSLException:Unrecognized SSL message,plaintext conn ...
- Charles的https抓包方法及原理/下载ssl/http证书
本文的Charles,适应windows/MAC/IOS/Android,避免抓包HTTPS失败和乱码: charles如果不配置SSL通用证书: 会导致HPPTS协议的域名抓取失败/乱码的现象: 首 ...
- 申请免费的ssl通配符证书
吐曹: 为了给我网站配置免费的htpps证书费死劲了, 折腾了一天, 找阿里阿里给我反馈的和我自己看的一样, 没什么用 我用Certbot生成证书以后怎么访问都是阿里的免费的hppts证书, 我都把阿 ...
- 怎么让网站在本地支持SSL?
打开vs,点击项目,查看属性,打开ssl 如果有什么危险提示,就允许 右击项目,选择属性 运行项目
- Could not create SSL connection through proxy serve-svn
RA layer request failedsvn: Unable to connect to a repository at URL xxxxxx 最后:Could not create SSL ...
随机推荐
- [USACO08DEC]在农场万圣节Trick or Treat on the Farm
题目描述 Every year in Wisconsin the cows celebrate the USA autumn holiday of Halloween by dressing up i ...
- js异步获取数据的问题
最近做js开发的时候发现了很多哥们不能区分同步和异步的区别,典型的在ajax部分,在该ajax为异步操作的时候,获取不到success之后的data的值,于是产生了各种奇葩的写法.比如创建一个局部变量 ...
- Web性能优化——缓存
Ehcache: ehcache的配置文件ehcache.xml <?xml version="1.0" encoding="UTF-8"?> &l ...
- css transform旋转属性
将以下代码复制到本地就可以看到效果: <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- mac的一些配置
1,基础知识 /etc/bashrc :是针对系统所有用户的全局变量,只有root用户才能修改这两个文件,对一般用户来说是他们是只读的.一般用户要想修改它们,可以在命令前加sudo,意思是以Root身 ...
- NumPy数组属性
NumPy - 数组属性 这一章中,我们会讨论 NumPy 的多种数组属性. ndarray.shape 这一数组属性返回一个包含数组维度的元组,它也可以用于调整数组大小. 示例 1 import n ...
- 分步引导中,Js操作Cookie,实现判断用户是否第一次登陆网站
上一篇介绍了分布引导插件IntroJs的使用,本篇介绍通过Js操作cookie的方法. 分步引导的功能只适合与第一次登陆网站的新用户,不能每次登陆都提示分布引导,那么如何判断用户是否第一次登录网站呢? ...
- spring3: schema的aop与Aspectj的aop的区别
schema的aop如下: 接口: package chapter6.service; public interface IHelloAroundService { public void sayAr ...
- mvvm2
1:设计模式 在MVP模式中,为了让UI层能够从逻辑层上分离下来,设计师们在UI层与逻辑层之间加了一层interface.无论是UI开发人员还是数据开发人员,都要尊重这个契约.按照它进行设计和开发.这 ...
- ubuntu14.04搭建Hadoop2.9.0集群(分布式)环境
本文进行操作的虚拟机是在伪分布式配置的基础上进行的,具体配置本文不再赘述,请参考本人博文:ubuntu14.04搭建Hadoop2.9.0伪分布式环境 本文主要参考 给力星的博文——Hadoop集群安 ...