博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java-信息安全(七)-基于非对称加密,对称加密等理解HTTPS
阅读量:7060 次
发布时间:2019-06-28

本文共 1538 字,大约阅读时间需要 5 分钟。

概述

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

你可能感兴趣的文章
oracle同义词 创建,查询,删除
查看>>
关于spring mvc MaxUploadSizeExceededException 死循环解决方
查看>>
终于可以用Live Writer了
查看>>
用模式匹配解析 URL
查看>>
在学CI,基础OK,调用jquery的例子太少了。
查看>>
通过jstack日志分析和问题排查
查看>>
JAVA下的CURL
查看>>
Linux系统下java 生成图片乱码
查看>>
Spring MVC学习笔记(二)
查看>>
Java的5种键盘输入方式
查看>>
Golang关于channel传递引用引发的坑
查看>>
cookie 和session 的区别详解
查看>>
socket 编程入门教程(三)TCP原理:3、设计TCP socket的类(中)
查看>>
UITableView的性能优化
查看>>
JavaScript零基础入门——(六)JavaScript的字符串处理
查看>>
杭电2003
查看>>
Java泛型二:泛型类 泛型接口 泛型方法详解
查看>>
RabbitMQ Queue中Arguments属性参数过期队列,过期消息,超时队列的声明
查看>>
kettle API - Scala 调用示例
查看>>
HTML+CSS+JS面试题
查看>>