此篇文章仅自己书写过底层代码书写,用于记录学习过程,以便以后复习。 所用到的抓包工具为wireshark。 找一个ip不变的网站,然后用浏览器访问进行抓包分析。 TCP三次握手是前提。以下只说明加密解密过程。 client向server发送随机数+加密算法列表
server自己生成私钥,并且从ca机构得到证书,证书中包含了ca的公钥。 并且RSA非对称加密解密,生成数字证书。
在client端,使用ca的pub_k解密数字证书得到s.pub_k,然后用s.pub_k对发送的数据加密(数据有随机数R3,等等)。然后在server端用s.p_k解密。最后就双方使用R1,R2,R3生成密钥。之后就是用生成的密钥进行数据通信。这样就看不到发送的数据具体内容了。
之后生成的密钥进行数据通信,那么可以看到Application Data已经被加密,看不到了。 因为服务器的私钥是服务器自己拥有的,所以只有服务器才能解锁公钥加密的数据包。具体加密算法使用非对称RSA算法。 RSA算法涉及欧拉函数以及欧拉降幂。 比如要发送的数据为m(以下表示对m的每个字符加密),那么加密过程如下: 解释一下: 是欧拉函数(小于等于n的与n互质的数的个数): p1,p2…是n的素因数。 所以很容易得到密钥d。 因为e(私钥)是ca生成的,d(公钥)也是ca生成的,只有授权用户的才能拥有d。 在商量好使用的密钥之前是使用的非对称RSA(私钥需要有公钥解密)。商量之后使用的密钥就采用对称加密,比如AES(双方都通过一个密钥进行加密解密)。 有个有趣的事情: 欧拉降幂定义: 证明密文解密确实是明文: 所以ssl加密还是挺有意思的。
|