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. Httpclient远程调用WebService示例(Eclipse+httpclient)

    package cn.com.taiji.pos.httpserver; import java.io.BufferedInputStream;import java.io.ByteArrayOutp ...

  2. selenium使用中遇到的问题

    1.Exception in thread "main" org.openqa.selenium.WebDriverException: Cannot find firefox b ...

  3. ajax 请求登录超时跳转登录页的示例代码

    Ajax AJAX即“Asynchronous Javascript + XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. 在Filter里判断是否登录,如果未 ...

  4. Word中怎么用MathType编辑公式

    现如今,用电脑办公学习已经是一个不可阻挡的潮流.而与之相应的就是需要在这些办公软件进行相应的使用,最典型的一种就是要在Word编辑公式.其实在Word中编辑公式是一个很常见的事情,虽然它很常见,但是却 ...

  5. 通过代码注册COM、DLL组件

    注册代码如下:  C++ Code  1234567891011121314151617181920212223242526272829303132333435363738   // //====== ...

  6. Effective C++ Item 10,11 Have assignment operators return a reference to *this Handle assignment to self in operator =

    If you want to concatenate assignment like this int x, y, z; x = y = z = 15; The convention is to ma ...

  7. 13个非常实用的JavaScript小技巧

    使用!!操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是否有一个有效值,如果存在就返回true值.为了做这样的验证,我们可以使用!!操作符来实现是非常的方便与简单.对于变量可以使用 ...

  8. poj_2486 动态规划

    题目大意 N个节点构成一棵树,每个节点上有一个权重val[i], 从根节点root出发在树上行走,行走的时候只能沿着树枝行进.最多在树上走k步,每第一次到达某个节点j,可以获得val[j]的收益,求从 ...

  9. hdu 1300(dp)

    一个模式的dp. Pearls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  10. sessionStorage存储json对象

    应用场景: 账单列表中A页面:点击其中的一列,ajax返回的数据在这一页 点击进入账单详情B页面: 因为在A页面已经做过ajax的请求了,所以希望把当前其中的一个数组对象传到B页面中,所以,就考虑到暂 ...