HTTPS 广泛用于在线安全。它提供安全性和完整性,但不提供身份验证。为确保客户不与中间人交谈,我们拥有数字证书和 PKI。这一切都很好,除了在以下标准适用的情况下:
- 服务器和客户端不共享一个公共的、受信任的根 CA,因此它们无法验证彼此的证书
- 环境(例如防火墙、权限等)不允许使用常规 HTTPS 协议
问题是:我们是否仍然可以在客户端和服务器之间发送安全的、经过身份验证的消息,也许使用 Javascript?
类似于以下内容:
- 客户端定期向服务器发送 HTTP 请求
- 服务器响应包含 Javascript 代码的页面
- 客户端的Javascript异步发送数据到用于协商的服务器
- 服务器运行某种脚本(例如 PHP)来建立隧道
- 客户端和服务器通过加密隧道进行通信
我可以看到可以以这种方式发送具有安全性和完整性的消息,但是是否可以在不使用 PKI 的情况下进行身份验证,也许是通过利用服务器可以动态重写发送给客户端的 Javascript 的事实?