1、对称加密算法
对称加密算法的特点是加密密钥和解密密钥是同一把密钥K,且加解密速度快,典型的对称加密算法有DES、AES等。
2、非对称加密算法
非对称加密算法的特点是加密密钥K1和解密密钥K2是不一样的,他们是一对可互为加解密的密钥,一个可以公开,叫公钥;一个自己保留,不能让其他人知道,叫私钥。这样就能比较好的解决信息传递的安全性,相对来说加解密速度较慢,典型的非对称加密算法有RSA、DSA等。问题是如何保证加密用的接收者的公钥,即如何安全的传递公钥。
1、HTTPS请求客户端和服务器都做了什么?
1)客户端向服务器传输客户端的SSL协议版本号,支持的加密算法的种类,产生的随机数Key1及其他信息
2)服务器在客户端发送过来的加密算法列表中选取一种,产生随机数Key2,然后发送给客户端,并将自己的公钥证书也发送给客户端
3)客户端验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的CA是否可靠,发行者的公钥能否正确解开服务器证书的”发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配,如果合法性验证没有通过,通信将断开,如果合法性验证通过,将继续向下进行;
4)客户端随机产生一个随机数A/随机数B/随机数C(Pre-Master-Key),然后用服务器的公钥(从证书中获得)对其加密,然后将该Pre-Master-Key发送给服务器。
5)服务器接收到随机数A/随机数B/随机数C(Pre-Master-Key),则使用协商好的算法(H)计算出真正的用户通信过程中使用的对称加密密钥Master-Key=H(C1+S1+PreMaster);
6)至此为止,服务器和客户端之间都得到对称加密的密钥(Master-Key),之后的通信过程就使用Master-Key作为对称加密的密钥进行安全通信;
3、中间人攻击原理
1)客户端向服务器传输客户端的SSL协议版本号,支持的加密算法的种类,产生的随机数Key1及其他信息,中间人进行拦截,替换成自己的信息,发送到服务器。
2)服务器在客户端发送过来的加密算法列表中选取一种,产生随机数Key2,然后发送给客户端,并将自己的公钥证书也发送给客户端,中间人进行拦截,将自己的公钥证书替换后一并发送给客户端。
3)客户端验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的CA是否可靠,发行者的公钥能否正确解开服务器证书的”发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配,如果合法性验证没有通过,通信将断开,如果合法性验证通过,将继续向下进行;
4)客户端随机产生一个随机数A/随机数B/随机数C(Pre-Master-Key),然后用服务器的公钥(从证书中获得)对其加密,然后将该Pre-Master-Key发送给服务器,中间人进行拦截,用自己的私钥进行解密,得到对称加密的密钥,同时用拦截到的服务器的公钥证书对对称加密的密钥进行加密,然后发送给服务器。
5)服务器接收到随机数A/随机数B/随机数C(Pre-Master-Key),则使用协商好的算法(H)计算出真正的用户通信过程中使用的对称加密密钥Master-Key=H(C1+S1+PreMaster);
6)至此为止,服务器、客户端、中间人之间都得到对称加密的密钥(Master-Key);
4、如何保证数据的安全性(HTTP、HTTPS)?
由此可见,HTTP、HTTPS请求都是不安全的方式。既然我们无法防止被抓包,那么,只能在数据上进行加密,即使被抓到包,数据不被破解就好。每个公司有自己对应的加解密方式,以下提供一种方式:
1)通过时间戳方式: 将某个参数、时间戳按照一定顺序进行排列并在某个位置插入一定的字符串,然后用MD5进行加密,将其对为参数传递到服务器。