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. Oracle DBA面试突击题

    一份ORACLE DBA面试题 一:SQL tuning 类 1:列举几种表连接方式 答: Oracle的多表连接算法有Nest Loop.Sort Merge和Hash Join三大类,每一类又可以 ...

  2. 怎样实时判断socket连接状态?

    对端正常close socket,或者进程退出(正常退出或崩溃),对端系统正常关闭 这种情况下,协议栈会走正常的关闭状态转移,使用epoll的话,一般要判断如下几个情况 处理可读事件时,在循环read ...

  3. python的post请求抓取数据

    python通过get方式,post方式发送http请求和接收http响应-urllib urllib2 python通过get方式,post方式发送http请求和接收http响应-- import  ...

  4. 10款CSS3按钮 - 再也不用为按钮设计而发愁了

    这次主要给大家分享10款风格各异的CSS3按钮,如果你希望你的页面也能有很炫的样式,那么我相信这10款CSS3按钮就非常适合你,而且每一款都整理了源代码供参考,一起来看看吧. 1.绚丽的CSS3发光按 ...

  5. 关于Unity的C#基础学习(五)

    一.get/set访问器 class Person{ int my_age; //默认私有权限 int sex; //属性,类似于函数,但是又不是函数的东西 public int age{ get{ ...

  6. 断言(assert)和程序的安全保证

    断言,用来DEBUG错误的,在DEBUG时发现然后跟踪错误! 通常 写一个程序给别人使用的,这个代码在安全性上的要求是什么呢?直觉上,我们都知道程序不应该崩.但是通常C/C++的程序如果把包含API的 ...

  7. 【BZOJ】1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏(刷水严重)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1666 这种我就不说了.. #include <cstdio> #include < ...

  8. 【cb2】扩展硬盘

    1.硬盘为sata串口 2.参考 http://docs.cubieboard.org/tutorials/ct1/installation/moving_rootfs_from_nandflash_ ...

  9. 如何用ChemDraw中的ChemFinder查询反应过程

    ChemFinder是ChemDraw化学绘图软件的重要插件之一,ChemFinder是一个贮存众多化学信息的数据库管理系统,不仅可以用于查询基本化学结构,用户还可以用ChemFinder查询需要的反 ...

  10. Android设计模式之单例模式的七种写法

    一 单例模式介绍及它的使用场景 单例模式是应用最广的模式,也是我最先知道的一种设计模式.在深入了解单例模式之前.每当遇到如:getInstance()这样的创建实例的代码时,我都会把它当做一种单例模式 ...