服务端生成一对公私钥,私钥自己保留,公钥通过给客户端
客户端通过公钥加密数据后传送给服务端,服务端通过私钥解密收到的数据
只要私钥不泄露,数据都是安全的
但是如果中间有人截取了服务器和客户端的通信,拿到了服务器的公钥,将自己的公钥发送给客户端(客户端不知道公钥到底是谁的)
每次服务器给客户端发数据时,都被中间人截取,中间人用服务器的公钥解密,然后用自己的私钥加密再传给客户端
每次客户端给服务器发数据时,也被中间人截取,中间人用自己的私钥解密(因为客户端用中间人的公钥加密的),然后再用服务器的公钥加密再传给服务器
这样每次信息通信的数据都被中间人拿到了,所以不安全
客户端需要验证服务器的真实性才能保证传输安全,所以可以使用数字证书
服务器先去CA证书中心申请证书,其中包括服务器的公钥,CA用自己的私钥将服务器相关的信息加密
客户端收到服务器数据时,先用CA的公钥解密服务器信息,拿到服务器公钥,然后用服务器公钥解密服务器过来的数据,给服务器传数据也是用服务器的公钥加密了。
如果中间人截取数据,因为用的是自己的私钥加密的,所以浏览器可以分辨出数据不是从真实服务器传过来的。
参考链接:
数字签名是什么? - by 阮一峰
数字签名、数字证书、SSL、https是什么关系? - by 知乎