如何建立安全连接?
公钥:所有人都知道
私钥:只有服务器自己知道
公钥加密数据,私钥解密: 只要能解密这个数据就代表是服务端
私钥加密,公钥解密: 所有人都可以知道,但是没人能对解析出来的数据“二次伪造”,因为私钥只存在在服务端
1、客户端获取服务器公钥以及加密算法
2、客户端 => 服务端 客户端用公钥加密一个随机数rd,加密结果为str(没有私钥解密不了)
3、服务端 => 客户端 解析str,将rd的结果返回给客户端(私钥加密,有了公钥就可以以解析)
4、客户端校验rd,通过,此时利用对称加密,生成一个密钥以及加密算法
5、客户端 => 客户端 将上述密钥&加密算法利用公钥加密(没有私钥解密不了)
6、服务端 解析密钥&加密算法,此时可以正常通信
7、服务端 => 客户端 利用密钥&加密算法,返回客户端ok
8、可以开始愉快的通信了
1、如何确认是服务器的公钥?毕竟这个是最基础的东西?
答:证书。由三方可信的机构颁发的证书
2&3、返回的rd是所有人都可以解析的。如果这个rd很简单的话,那么中间人会不会破解这个"密钥"?
答:有这个理论可能,但是一般服务端返回的一般都是hash(rd),所以中间人解析也一脸懵,而客户端解析到这个数据可以自己对rd加密比较结果,判断是否是服务器发送的消息。