我理解在客户端想要将数据安全地发送到服务器的上下文中的非对称加密的概念.服务器将公钥发送到用于加密数据的客户端.服务器使用它的私钥解密消息.在这种情况下,一切都有意义,因为私钥只能由服务器访问.
但是,如果客户想要安全地接收数据呢?相同的概念可以适用于相反的方向(前端共享公钥并拥有私钥),除了私钥可供任何人使用,因为javascript中的源代码在Web浏览器中可用,它会失败加密的目的……
当然有一个解决方案.在搜索时我没有找到我的问题的明确答案,尽管许多人提到了HTTPS.我也想知道为什么以及如何运作以及我的知识存在缺陷.
客户端如何安全地从服务器接收数据?
解决方法:
正如您已经提到的,HTTPS就是这里的解决方案.您已经介绍了它的工作原理,但您只是缺少一些关键细节.
HTTPS使用非对称加密来建立初始加密通信.后续通信实际上是使用对称加密来执行的,因为对于较小的密钥大小,它更高性能且更安全.因此,最初的握手使用服务器的公钥来交换共享密钥,服务器和客户端将用于所有通信.
此外,服务器使用的公钥通常由您的浏览器已知的密钥的可信证书颁发机构签名.这允许您的Web浏览器验证服务器的公钥,以便您知道通信未被位于您和服务器之间的攻击者拦截和更改.否则攻击者可能会拦截所有通信并向您发送一个声称是服务器公钥的不同公钥,您如何知道其中的区别?
一旦建立了加密通道,客户端发送给服务器的任何内容都会被加密,同样,服务器发送给客户端的任何内容都会被加密.这里的加密保证确保了所有通信的机密性和完整性.
因此,通过使用HTTPS,客户端可以安全地从服务器接收数据,以及安全地将数据发送到服务器,而无需将任何密钥直接嵌入到Javascript代码中.