分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
此为博主(yjclsx)原创文章,如若转载请标明出处,谢谢!
HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会被加密,所以传输的数据都是加密后的数据。
下面介绍https具体是如何进行加密,解密,验证的,也就是https的交互过程。
1、https的交互过程
1.1 客户端发起HTTPS请求
比如在浏览器里输入https://blog.csdn.net/yjclsx,然后请求到server的443端口。浏览器会把自身支持的一系列Cipher Suite(密钥算法套件,简称Cipher)发送给服务端。
1.2 服务端返回
服务端接收到客户端所有的Cipher后与自身支持的对比,如果不支持则连接断开,反之则会从中选出一种加密算法和HASH算法以证书的形式返回给客户端,证书中还包含了公钥、颁证机构、网址、失效日期等等。
注:采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥,用于非对称加密。
1.3 客户端验证证书并响应
客户端收到服务端响应后会做以下几件事:
1.3.1 验证证书的合法性
颁发证书的机构是否合法与是否过期,证书中包含的网站地址是否与正在访问的地址一致等。证书验证通过后,在浏览器的地址栏提示网站安全。
1.3.2 生成随机密码
如果证书验证通过,或者用户接受了不授信的证书,此时客户端会生成一串随机数,用于后续进行对称加密,以后称之为密钥,然后用证书中的公钥加密这个密钥。
1.3.3 HASH握手信息
用最开始约定好的HASH方式,把握手消息取HASH值,然后用密钥加密 “握手消息+握手消息的HASH值(即签名)” 。在这里之所以要加上握手消息的HASH值,主要是把握手消息做一个签名,用于验证握手消息在传输过程中没有被篡改过。
最后将之前生成的所有信息发送给服务端。
1.4 服务端解析和验证
服务端接收客户端发来的数据之后要做以下的操作:
1.4.1 解析和验证
使用自己的私钥将客户端使用公钥加密的信息解密得到之前客户端生成的密钥。然后使用密钥解密客户端发来的加密后的握手消息得到 “握手消息+握手消息的HASH值(即签名)” ,最后同样对握手信息进行HASH签名,比对和客户端传来的HASH值是否一致,如果一致则HASH验证通过,即表明握手消息在传输过程中没有被篡改过。
1.4.2 返回
同样使用密钥加密一段握手消息,发送给客户端。
1.5 客户端解析和验证
客户端用密钥解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束。
1.6 后续通信
由于RSA等非对称加密算法的性能是非常低的,原因在于寻找大素数、大数计算、数据分割需要耗费很多的CPU周期,所以一般的HTTPS连接只在第一次握手时使用非对称加密,通过握手交换对称加密的密钥,之后所有的通信数据将由之前客户端生成的密钥进行对称加密。
因为这串密钥只有客户端和服务端知道,所以即使中间请求被拦截也是没法解密数据的,以此保证了通信的安全。
2、结语
这里客户端与服务端互相发送加密的握手消息并验证,目的是为了保证双方都安全地获得了一致的密钥,并且可以正常的加密解密数据,为后续真正数据的传输做一次测试。另外,HTTPS一般使用的加密与HASH算法如下:
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256
参考文献
1、http://www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html
2、https://www.cnblogs.com/zery/p/5164795.html
此为博主(yjclsx)原创文章,如若转载请标明出处,谢谢!