Java安全(加密、摘要、签名、证书、SSL、HTTPS)
来源:互联网 发布:20级五气朝元数据 2017 编辑:程序博客网 时间:2024/04/30 15:10
转自:http://blog.sina.com.cn/s/blog_5c5d5cdf0101dvpb.html
对于一般的开发人员来说,很少需要对安全领域内的基础技术进行深入的研究,但是鉴于日常系统开发中遇到的各种安全相关的问题,熟悉和了解这些安全技术的基本原理和使用场景还是非常必要的。本文将对非对称加密、数字摘要、数字签名、数字证书、SSL、HTTPS等这些安全领域内的技术进行一番简要的介绍,解释他们之间的关系,同时补充一些周边话题。
安全领域的技术众多,但是归根结底,他们都是为了保障如下三个方面:
对称加密和非对称密钥加解密
简言之:
对称加密速度快,但加密和解密的钥匙必须相同,只有通信双方才能知道钥匙
非对称加密速度慢,加密和解密的钥匙不相同,某一个人持有私钥,任何人都可以知道公钥
数字摘要--数据完整性的校验
数字签名--水到渠成的技术
综上所述,数字签名有两种功效:一是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。二是数字签名能确定消息的完整性。
数字证书--值得信赖的公钥
SSL
基本原理:先非对称加密传递对称加密所要用的钥匙,然后双方用该钥匙对称加密和解密往来的数据
要求:服务器端需安装数字证书,用户可能需要确认证书,会话过程中的加密与解密过程由浏览器与服务器自动完成,对用户完全透明。
SSL握手阶段示意图:
工作过程:
浏览器向服务器发出请求,询问对方支持的对称加密算法和非对称加密算法;服务器回应自己支持的算法。
浏览器选择双方都支持的加密算法,并请求服务器出示自己的证书;服务器回应自己的证书。
浏览器随机产生一个用于本次会话的对称加密的钥匙,并使用服务器证书中附带的公钥对该钥匙进行加密后传递给服务器;服务器为本次会话保持该对称加密的钥匙。第三方不知道服务器的私钥,即使截获了数据也无法解密。非对称加密让任何浏览器都可以与服务器进行加密会话。
浏览器使用对称加密的钥匙对请求消息加密后传送给服务器,服务器使用该对称加密的钥匙进行解密;服务器使用对称加密的钥匙对响应消息加密后传送给浏览器,浏览器使用该对称加密的钥匙进行解密。第三方不知道对称加密的钥匙,即使截获了数据也无法解密。对称加密提高了加密速度。
HTTPS
如果我们是在一开始来讲述HTTPS协议,那将会是一个很大的话题,但是讲到这里的时候,实现上所有关于HTTPS的内容,我们基本上已经讲完了,它所有依赖的所有安全技术就是上面我们所提及的,就像大家所知道的那样,HTTPS是由SSL+HTTP协议构建的可进行加密传输、身份认证(确认客户端连接的目标主机是否是真实正确的主机)的网络协议。https所能实现的安全保证,正是SSL所能解决的安全问题。
HTTPS的劣势:
https的主要缺点就是性能问题。造成https性能低于http的原因有两个:
1.对数据进行加解密决定了它比http慢。
2.另外一个重要原因的是https禁用了缓存。
相关测试数据表明使用HTTPS协议传输数据的工作效率只有使用HTTP协议传输的十分之一。因此对于一个网站来说,只有那对那些安全要求极高的的数据才会选择使用https进行传输。
对以上的知识联通起来做一个集中图示,相信大家会有更加清晰的理解:
1.鲍勃有两把钥匙,一把是公钥,另一把是私钥。
2.鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。
3.苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。
4.鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。
5.鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的数字摘要(digest)。
6.然后,鲍勃使用私钥,对这个数字摘要加密,生成"数字签名"(signature)。
7.鲍勃将这个签名,附在信件下面,一起发给苏珊。
8.苏珊收信后,取下数字签名,用鲍勃的公钥解密,得到信件的摘要。由此证明,这封信确实是鲍勃发出的。
9.苏珊再对信件本身使用Hash函数,将得到的结果,与上一步得到的摘要进行对比。如果两者一致,就证明这封信未被修改过。
10.复杂的情况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用自己的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,但是还以为这是鲍勃的公钥。因此,道格就可以冒充鲍勃,用自己的私钥做成"数字签名",写信给苏珊,让苏珊用假的鲍勃公钥进行解密。
11.后来,苏珊感觉不对劲,发现自己无法确定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥做认证。证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。
12.鲍勃拿到数字证书以后,就可以放心了。以后再给苏珊写信,只要在签名的同时,再附上数字证书就行了。
13.苏珊收信后,用CA的公钥解开数字证书,就可以拿到鲍勃真实的公钥了,然后就能证明"数字签名"是否真的是鲍勃签的。
14.我们看一个应用"数字证书"的实例:https协议。这个协议主要用于网页加密
15.首先,客户端向服务器发出加密请求。
16.服务器用自己的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。
17.客户端(浏览器)的"证书管理器",有"受信任的根证书颁发机构"列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内。
18.如果数字证书记载的网址,与你正在浏览的网址不一致,就说明这张证书可能被冒用,浏览器会发出警告。
19.如果这张数字证书不是由受信任的机构颁发的,浏览器会发出另一种警告。
20.如果数字证书是可靠的,客户端就可以使用证书中的服务器公钥,对信息进行加密,然后与服务器交换加密信息。
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
- 摘要、签名、加密、证书
- 安全加密解密 签名 证书
- 和安全有关的那些事(非对称加密、数字摘要、数字签名、数字证书、SSL、HTTPS)
- CA加密,网络安全HTTPS SSL-ca证书
- 八大免费SSL证书-给你的网站免费添加Https安全加密
- https安全协议 ssl证书使用心得
- 签名:摘要的加密 证书:公钥的加密
- java web SSL安全证书
- The Go Programming Language Specification
- zoj3529 A Game Between Alice and Bob
- AlertDialog详解
- 一些算法记录
- 使用vb.net获取程序的相对路径及其根目录
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
- java 栈----java.util.Stack
- Foundation: Quicker Sequential Search
- MATLAB中的round函数
- ubuntu下xapian_weibo安装及相关配置
- 宏和函数在同名在一个头或者一个文件的作用
- 大数据的加法、减法、乘法以及阶乘的计算问题
- Java反射相关
- python 多维数组构建问题