https通讯原理

HTTPS在传输数据之前需要客户端(浏览器)与服务端(网站)之间进行一次握手,在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL协议不仅仅是一套加密传输的协议,更是一件经过艺术家精心设计的艺术品,TLS/SSL中使用了非对称加密,对称加密以及HASH算法。握手过程的具体描述如下:

1.浏览器(A)将自己支持的一套加密规则(JHG)发送给网站(B)。
2.网站(B)从中选出一组加密算法(J)与HASH算法(H),并将自己的身份信息以证书(CA)的形式发回给浏览器(A)。证书(CA)里面包含了网站地址,公钥(P),以及证书的颁发机构等信息。
3.浏览器(A)获得网站(B)证书(CA)之后浏览器(A)要做以下工作:
a) 验证证书(CA)的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
b) 如果证书(CA)受信任,或者是用户接受了不受信的证书(CA),浏览器(A)会生成一串随机数的密码(R),并用证书(CA)中提供的公钥(P)加密(RP)。
c) 使用约定好的HASH算法计算握手消息(WSH),并使用生成的随机数对消息进行加密(WSR),最后将之前生成的所有信息发送给网站。
4.网站(B)接收浏览器(A)发来的数据(D=RP+WSH+WSR)之后要做以下的操作:
a) 使用自己的私钥(S)将信息(RP)解密取出密码(R),使用密码(R)解密浏览器(A)发来的握手消息(WSR)(WS),并验证HASH是否与浏览器发来的(WSH)一致。
b) 使用密码(R)加密一段握手消息(WS2R),发送给浏览器(A)。
5.浏览器(A)解密(WS2R)并计算握手消息(WS2)的HASH(WS2H),如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。

参考:http://www.cnblogs.com/ttltry-air/archive/2012/08/20/2647898.html

建议图片下载下来查看,放大更清晰。

符号说明:

1、A:客户端,如浏览器。
2、B:服务器端,如网站。
3、JHG:A支持的一套加密规则,包括加密算法、HASH算法。
4、J:B选出的一组加密算法。
5、H:B选出的HASH算法。
6、CA:B的证书。
7、P:证书中的公钥。
8、S:B的私钥,和证书中的公钥相对应。
9、R:A生成的随机数密码。后面对称加密中的秘钥。
10、WS:A生成的握手消息。
11、RP:用P加密后的R。
12、WSR:用R加密后的WS。
13、WSH:用H签名后的WS。
14、D:A发送给B的第一次握手相关数据。RP+WSR+WSH。
15、WS2:B生成的握手消息。
16、WS2R:用R加密后的WS2。
17、WS2H:用H签名后的WS2。
18、D2:B发送给A的第二次握手相关数据。WS2R+WS2H。

如何验证证书的合法性?

根证书即权威机构的证书,目前权威机构指的是CA。

有效的证书就是要由权威机构CA签名,CA就会用自己的私钥对相关机构进行数字签名生成有效的证书。客户端浏览器会安装CA的根证书,由CA签名的证书是被CA所信任的,即该机构是可以被信任的,不是钓鱼网站。这就是信任链。

当客户端与服务端进行连接时,服务端会将自己的证书发送给客户端,此时客户端需要校验这个证书的合法性

1.服务器将自身的证书services.cer传输给客户端​.

2.客户端从自己的信任根证书列表查找是否存在CA证书。

3.用CA证书中提供的公钥去验证services.cer,如果公钥能够解开services.cer,则可以说明该证书是被CA所信任的,随后再去验证是否过程等等

这时候只能说明这个证书是合法的,如何保证通信过程中,双方身份都是合法性的。

4.​取得services.cer中的公钥进行服务器身份的验证。

5.​客户端生成随机数,传输给服务端,服务端使用公钥对随机数进行签名,并且回传给客户端,客户端用services.cer中的公钥对随机数的签名进行验证,如果验证通过,就说明该服务器确实拥有对应服务器的私钥,此时就可以判定该服务器的身份是合法的。

​通信的双方身份合法之后,就要建立安全的会话。

6.​客户端会生成会话密钥,使用服务器公钥加密。服务器用自己的私钥解密后,用会话密钥加密数据进行传输

参考:http://blog.sina.com.cn/s/blog_c7ef5e8c0102we9g.html

符号说明:

1、A:客户端,如浏览器。

2、B:服务器端,如网站。

3、CA:CA证书签发机构。

4、P:CA机构的公钥,所有人可见,并且直接嵌入浏览器内了。

5、Sca:CA机构的私钥,仅有CA机构自己可见。用来签名自己签发的证书。

6、B':冒充B网站的网站,如C网站。试图申请CA证书来冒充B网站。可是CA机构要验证申请人的真实身份,并且证书要指定C网站的域名。

7、C'A':冒充CA机构的一方,有CA的公钥P,可是没有CA的私钥Sca,无法签名。

https通讯原理的更多相关文章

  1. 深入理解HTTPS通讯原理

    一.HTTPS简介 HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),简单来讲就是加了安全的HTTP,即HTTP+SSL:我们知 ...

  2. 开源纯C#工控网关+组态软件(四)上下位机通讯原理

    一.   网关的功能:承上启下 最近有点忙,更新慢了.感谢园友们给予的支持,现在github上已经有.目标是最好的开源组态,看来又近一步^^ 之前有提到网关是物联网的关键环节,它的作用就是承上启下. ...

  3. HTTPS加密原理(转)

    Header HTTP.HTTPS在我们日常开发中是经常会接触到的. 我们也都知道,一般 Android 应用开发,在请求 API 网络接口的时候,很多使用的都是 HTTP 协议:使用浏览器打开网页, ...

  4. http 基础与通讯原理

    目录 http 基础与通讯原理 Internet 与中国 1990年10月 注册CN顶级域名 1993年3月2日 接入第一根专线 1994年4月20日 实现与互联网的全功能连接 1994年5月21日 ...

  5. HTTPS那些事 用java实现HTTPS工作原理

    HTTPS那些事 用java实现HTTPS工作原理 博客分类: java历险   今天被问到关于https原理的问题,结果由于知识掌握不牢靠,停留于表面,很多细节都无法回答清楚,于是决定把https的 ...

  6. HTTPS加密原理与过程

    HTTPS加密原理与过程 HTTP 超文本传输协议一种属于应用层的协议 缺点: 通信使用明文(不加密),内容可能会被窃听 不验证通信方的身份,因此有可能遭遇伪装 无法证明报文的完整性,所以有可能已遭篡 ...

  7. https 加密原理

    转载于 https://www.cnblogs.com/imteck4713/p/12016313.html 补充: <图解HTTP> 1.引言 随着互联网安全意识的普遍提高,对安全要求稍 ...

  8. HTTPS工作原理

    HTTPS是什么 HTTPS全称为Hypertext Transfer Protocol over Secure Socket Layer,及以安全为目标的HTTP通道,简单说就是HTTP的安全版本. ...

  9. HTTPS实现原理

    HTTPS实现原理 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版 ...

随机推荐

  1. STM32CubeMX新建工程+基本IO配置过程

    Ⅰ.写在前面 学习本文之前可以查看我前面的文章: STM32CubeMX介绍.下载与安装 STM32CubeMX使用方法及功能介绍 本文接着上一篇文章结合基本IO配置实例,讲述关于STM32CubeM ...

  2. jQuery替换内容

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  3. Web前端开发中的MCRV模式(转)

    作者: izujian  来源: baiduux 摘要:针对前端开发中基于ajax的复杂页面开发所面临的代码规模大,难以组织和维护,代码复用性.扩展性和适应性差等问题,本文尝试以MVC思想为 基础,结 ...

  4. Git神器sourceTreesetup,让你的git效率迅速提升

    image.png 小编之前在简书和公众号发不过idea如何git clone,git add,创建分支,创建码云的操作idea和Webstorm上使用git和github,码云最近又找到一款git神 ...

  5. sdut 2154:Shopping(第一届山东省省赛原题,水题)

    Shopping Time Limit: 1000MS Memory limit: 65536K 题目描述 Saya and Kudo go shopping together.You can ass ...

  6. JNI 各类数据类型处理

    JNI和java数据类型转换: 1.基本数据类型下面一张表是描述了 Java 基本数据类型和JNI中基本数据类型的相对应关系已经占用空间大小. 随便观察就能发现,其实就基本数据类型而已,JNI基本数据 ...

  7. POJ2456 Aggressive cows(二分+贪心)

    如果C(d)为满足全部牛之间的距离都不小于d. 先对牛舍的位置排序,然后二分枚举d,寻找满足条件的d. #include<iostream> #include<cstdio> ...

  8. 打印系统所有的PID

    #!/usr/bin/env python #-*- coding:utf-8 -*- ''' 打印系统所有的PID ''' import os def get_all_pid(): for pid ...

  9. Python学习笔记4—列表List

    列表定义 Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. >>> a=['] >>> type(a) &l ...

  10. Tomcat服务器的安装与配置

    安装 输入网址进入Tomcat的官网            在左边导航栏选择对应下载的版本            下载安装包形式             下载并解压到我们欲放入的目录中 配置      ...