我有一个通过 HTTPS 运行的前端 Web 服务器 - 这是面向公众的 - 即端口是开放的。
我还有一个后端 API 服务器,我的网络服务器向其发出 API 请求 - 这是面向公众的并且需要身份验证 - 端口是开放的。
这两个服务器通过 HTTPS 运行。
API 服务器背后还有许多其他服务器。API 服务器反向代理这些服务器。这些其他服务器的端口不对传入流量开放。只能通过 API 服务器与它们通信。
我的问题......“许多其他服务器”是否需要通过 HTTPS 运行,或者,鉴于它们无法从外部访问,它们是否可以安全地通过 HTTP 运行?
我以为这是一个常见问题,但我找不到答案。谢谢。如果这是重复的,请告诉我正确的答案。
答案1
这是一个见仁见智的问题,也与监管问题有关(如果您遇到的话)。
即使目前没有必要,我也极力主张在任何应用程序级防火墙/负载平衡器/前端服务器和后端服务器之间启用 HTTPS。这样可以减少一个攻击面。随着更多敏感信息开始传递,我与需要转换的地方签订了合同 - 最好从那里开始。
我通常建议使用内部 CA(如果有)或自行签名(如果没有内部 CA)后端服务器。我们会将到期日期设置得比较长,以避免不必要的更改。
答案2
总结你应该加密流量除非它在同一主机上。
您不能信任您的网络。您自己网络中的恶意软件可以拦截/修改 http 请求。
这不是理论上的攻击,而是现实生活中的例子:
一些网站网络内的路由器(可能已被黑客入侵)会注入广告:https://www.blackhat.com/docs/us-16/materials/us-16-Nakibly-TCP-Injection-Attacks-in-the-Wild-A-Large-Scale-Study-wp.pdf
Cloudfare 和后端之间的印度网络嗅探:https://medium.com/@karthikb351/airtel-is-sniffing-and-censoring-cloudflares-traffic-in-india-and-they-don-t-even-know-it-90935f7f6d98#.hymc3785e
答案3
“许多其他服务器”是否需要通过 HTTPS 运行,或者考虑到它们无法从外部访问,它们是否可以安全地通过 HTTP 运行?
这实际上取决于您想要实现的目标。了解使用 HTTPS 的目的是保护两点之间传输的数据。如果您担心数据在网络内被嗅探,那么也许应该首先处理这个问题。如果您需要保护网络内传输的数据,那么您所说的是,您要么担心网络内传输数据的安全性,要么出于某些合规性相关原因需要加密传输中的数据。
这其实更像是一个意见问题,但答案是视情况而定。你想做什么?你加密的是哪种数据?你想防御哪些威胁?是否有法律要求(例如 PCI-DSS、HIPAA 等)要求你需要加密传输中的数据?如果数据是敏感数据,并且你担心在网络内传输时可能会被滥用,那么我建议与管理层一起解决问题。那么最后,你想保护什么,为什么要保护它?
答案4
如今,有了专门的 CPU 指令来加速加密,而新的传输协议在未加密的链接上根本无法运行或性能下降(HTTP/2、gRPC 等),也许更好的问题是:你有什么理由需要将网络链接降级到 HTTP?如果没有特定原因,那么答案是继续使用 HTTPS。