常用加密算法
- 常用对称加密算法
AES、DES
优点:速度快,对称性加密通常在消息发送方需要加密大量数据时使用,算法公开、计算量小、加密速度快、加密效率高。
缺点:在数据传送前,发送方和接收方必须商定好秘钥,然后 使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘 钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。 - 常用非对称加密算法
RSA、elgamal
缺点:速度较慢
优点:安全 - 常用线性散列算法(签名算法)
MD5、SHA1、HMAC
这几种算法只生成一串不可逆的密文,经常用其效验数据传输过程中是否经过修改,因为相同的生成算法对于同一明文只会生成唯一的密文,若相同算法生成的密文不同,则证明传输数据进行过了修改。通常在数据传说过程前,使用MD5和SHA1算法均需要发送和接收数据双方在数据传送之前就知道密匙生成算法,而HMAC与之不同的是需要生成一个密匙,发送方用此密匙对数据进行摘要处理(生成密文),接收方再利用此密匙对接收到的数据进行摘要处理,再判断生成的密文是否相同。
什么是http协议
hyper text transfer protocol:超文本传输协议,位于TCP/IP四层模型中应用层
HTTP协议的信息传输完全以明文方式,不做任何加密,容易被中间人截获篡改,因此存在两个问题:
- 没有保密性,可能被窃取
- 身份不确定,无法确定时服务端响应还是中间人的响应
我们可以采用抓包工具,比如青花瓷(charles)来进行模拟拦截抓包,打断点拦截请求,修改服务器给客户端的响应数据
身份认证是如何进行的?
为什么人民币可以在市场流通?是因为我们大家都信任中国人民银行这个机构,所以不管中国人民银行发布多少面值的纸币,都是可以流通的
CA认证也是这样,有专门的CA机构,在网络中,就是做第三方的认证的,认证的前提是 互联网 对CA机构是信任的,只要是你这个机构认证的服务器我就认为是有效的
下面是证书颁发流程:
CA机构自己的私钥在CA机构,公钥在浏览器内置名单,CA机构用自己的私钥加密证书,比如中国人民银行印钱的技术和设备都不是公开的
浏览器是可以直接在内置名单里面拿到CA机构的公钥的,因此就可以对这个证书解密,解密以后就拿到了该服务端的证书里面的公钥和数字签名,这个数字签名(hash值)是CA机构生成的,证书里带的,浏览器用公钥解开证书以后,再hash运算,与签名的hash值对比,并且还会对证书的有效期,当前域名进行对比
如果不相同的话,浏览器会提示:当前网站证书不是安全,不是可靠的
我们可以自己模拟来本地生成证书,使用java提供的一个工具
下面的工具,无论是什么协议,监控的网卡,都是可以获取的
在应用层和传输层加了一层 TLS,前两行是握手
第一行,客户端发送给服务端,random是用于生成对称加密密钥的随机值,有sessionId意思是之前访问过服务端,另外还有支持的可选择加密方式
第二行,服务器返回给客户,从客户端发过来的加密方式中选择一种确定的加密方式
第三行 服务器又发给客户端一个信息,带着证书
server key exchange是一个对称加密,密钥协商的过程
要保证客户端和服务端的密钥相同,这样对称加密才能解开
server hello done代表服务端已经把这个密钥协商消息给你发过去了,然后需要你客户端去做
第四行 当前客户端给服务器发送客户端生成密钥的规则,注意:仅仅是发送响应算法的规则和一些参数,不会把真正的密钥传过去的
这一过程主要为了客户端和服务器产生相同的密钥串 ,并且客户端通知服务端自己这边已经生成好了密钥
第六行,
第一个是sessionTicket所代表的意思是会话的id不用id来表示,用这个加密的sessionTicket来表示
第二个是服务器返回,切换我们的密钥,告知客户端我们可以用这个密文传输数据了
第三个是告诉客户端,当前我们协商的密钥是正确的
第7行 applicationData表示我们可以真正的进行密文传输了,以后客户端和服务端的通话都是这种applicationData,http-over-tls就是https,下面的是加密后的传输的内容
总结
- 有了CA证书+签名,服务端就不可以被伪造
- 以后通讯的内容是不是可以被保密的,下面这部分就是这个过程,告诉算法和参数,推算DLH算法
https不仅仅要验证服务端身份是否可靠
同时还要保证客户端和服务端以后的通讯是加密的
ssl和tsl
TLS(Transport Layer Security,传输层安全协议)是更为安全的升级版 SSL(Secure Socket Layer,安全套接字层)
协议 | 年份 |
---|---|
SSL 2.0 | 1995 |
SSL 3.0 | 1996 |
TLS 1.0 | 1999 |
TLS 1.1 | 2006 |
TLS 1.2 | 2008 |
TLS 1.3 | 2018 |