大家都知道,在浏览器里输入一个web网址,浏览器会发送一个http请求,请求远方服务器上的资源。浏览器发送的http包信息会经过多个路由器或者交换机才能到达远方服务器。在网络传输的过程中,如果有黑客入侵到路由器或者交换机(比如家里的路由器被黑),估计经过这些路由器的网络数据,很容易就被网络抓包(特别是抓出http 头部的信息里的cookie信息,然后把cookie信息在写入自己的浏览器冒充受害者,后果就不说了……)
关于怎样用java进行加解密,推荐学习梁栋的《Java加密与解密的艺术》
https,可以理解为socket+SSL+http(https是在SSL上的http,底层用了SSL,应用层协议还是http。SSL底层用的是socket,对socket传输的数据进行加解密)
SSL主要提供了以下几个功能
1)认证用户和服务器,确保数据发送到正确的客户机和服务器
2)加密数据以防止数据中途被窃取
3)维护数据的完整性,确保数据在传输过程中不被改变。
在SSL中,主要是用非对称算法交换对称密钥,后续的通信过程都是用对称密钥和对称算法进行加解密(对称算法的加解码耗时,比非对称算法低很多;但是非对称算法的破解可能性比对称算法低很多。)
非对称算法有以下几个特性:
公钥加密,只能用私钥解密;私钥加密,只能用公钥解密
SSL通信大概过程(很简陋的单向验证)
首先客户端发送自己的SSL版本号,支持的算法,随机数等发给服务端
服务端收到请求后,发送自己的证书(带有公钥),支持的算法等信息给客户端
客户端验证服务端发过来的证书(比如证书的合法性,或者到第三方验证机构验证其合法性,证书里的域名是否和访问的域名相同,是否过期等)
客户端生成一个“对称密钥”,然后用服务端证书里的公钥对其加密(注意公钥加密只能私钥解密,而私钥在服务端),并把加密算法等信息也发给服务端
服务端收到客户端用公钥加密的“对称密钥”进行解密
客户端和服务端通信将使用协商的“对称密钥”和对称算法进行加解密。
原文地址:http://blog.youkuaiyun.com/liuwenjie517333813/article/details/68060863