昨天研究一天密码学,把一些简单的概念给弄清楚了。
2种加密方式:symmetric-key encryption(对称加密) public-key encryption(公钥加密)
第一种对称加密:数据经过一个对称密钥加密,然后在解密端通过同一个对称密钥解密。优点:速度快,而且大数据的加解密。缺点:共享同一个密钥,安全性有待提高。
第二种公钥加密:数据通过公钥加密后,需要一个对应的私钥进行解密。优点:安全性高。缺点:速度慢,不支持大数据加解密。
数字签名:数据经过不可逆的哈希算法,生成的签名用公钥加密后,由接收端对数据在进行一次哈希,然后私钥解密签名,两个哈希值对比,如果不同,则说明数据被篡改。
SSL握手:
1、客户端发送SSL版本,加密设置,随机生成数和一些其他需要与服务端SSL通信的必须信息给服务端。
2、服务端发送SSL版本,加密设置,随机生成数和一些其他需要与服务端SSL通信的必须信息给客户端,同时服务端还发送自己的证书。如果客户端请求的服务器资源是需要客户端认证,还需要请求客户端的证书。
3、客户端用接收到的信息认证服务端,如果服务端不能被认证,警告用户认证连接不恩能够被建立。
4、客户端为这次会话产生对称密钥,并用服务器证书上的公钥加密,并把加密后的数据发送到服务端。
5、如果服务端请求客户端认证(一个在握手过程中可选的步骤),客户端给另外一块服务端和客户端都知道的数据进行签名,把签名和客户端自己的证书,以及加密的对称密钥发送给服务端。
6、如果服务端请求了客户端认证,开始认证客户端。如果认证失败,断开会话。如果成功,服务端用自己的私钥解密经过加密的对称密钥,然后客户端和服务端均会执行一系列的步骤,生成一个主密钥。
7、服务端和客户端都通过主密钥生成会话密钥,通过会话密钥来对SSL会话中的信息加解密,并且验证完整性。
8、客户端发送一段消息给服务端表明未来会用这个会话密钥加密,并且发送结束握手的消息。
9、服务端发送一段消息(包含确认会话密钥,结束握手)。
10、SSL握手完成,开始SSL会话。
https采用http+SSL(443端口)进行通信。SSL加密位于传输层之上,所以外部抓取https的报文是不可行的。可以在应用层hook加密的ssl函数,在SSL加密前抓取到这段数据。