首页 > 代码库 > java-信息安全(七)-基于非对称加密,对称加密等理解HTTPS

java-信息安全(七)-基于非对称加密,对称加密等理解HTTPS

概述

java-信息安全(一)-BASE64,MD5,SHA,HMAC

java-信息安全(二)-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4

java-信息安全(四)-数据签名、数字证书

java-信息安全(五)-非对称加密算法RSA

如果想要理解好https,请尽量了解好以上信息等。

参看文章:

http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html

https://cattail.me/tech/2015/11/30/how-https-works.html

http://www.cnblogs.com/binyue/p/4500578.html

基本概念

  HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。

  Https是一种基于SSL/TLS的Http协议,所有的http数据都是在SSL/TLS协议封装之上传输的。

  Https协议在Http协议的基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层协议。

  ——>HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。

  ——>HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。

  TLS/SSL中使用了非对称加密,对称加密以及HASH算法

图例【基于RSA模型】

技术分享

第一步

  浏览器给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的一套加密规则发送给网站服务器。

第二步

  服务器从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器、以及一个服务器生成的随机数(Server random)。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。

第三步

  浏览器确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给服务器。

  获得网站证书之后浏览器要做以下工作:

    a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。

    b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。

    c) 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。

第四步

  服务器使用自己的私钥,获取浏览器发来的随机数(即Premaster secret)。

  网站接收浏览器发来的数据之后要做以下的操作:

    a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。

    b) 使用密码加密一段握手消息,发送给浏览器。

第五步

  浏览器和服务器根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。

 

HTTPS一般使用的加密与HASH算法

  非对称加密算法:RSA,DSA/DSS

  对称加密算法:AES,RC4,3DES

  HASH算法:MD5,SHA1,SHA256

技术分享

 

java-信息安全(七)-基于非对称加密,对称加密等理解HTTPS