我们有一个运行在 tomcat 8080 端口的应用程序,我们前端是 Apache httpd,安装并实现了 SSL,所有请求都重定向到端口 443,并通过 mod_proxy_httpd 代理到 tomcat 8080:
ProxyPass / http://localhost:8080/ retry=0 timeout=5
ProxyPassReverse / http://localhost:8080/
一切正常,从客户端到 httpd 的请求是安全的,但是显然 httpd 和 tomcat 之间的通信没有加密。
我的问题是: 1.如果httpd和tomcat之间的通信不加密会不会有问题?如果httpd和tomcat在同一个服务器下?
2.我们在支付处理过程中传输敏感数据,例如客户信用卡信息,我们是否也需要在tomcat上实现SSL(例如端口8443),并将请求从443代理到安全的tomcat端口8443?因此,从客户端到 httpd 再到 tomcat 的所有内容都将受到保护,但这可能会影响性能,因为需要 2 种方式的加密/解密。
我们一直在搜索这个问题,但没有找到明确的答案。非常感谢任何帮助。
最佳答案
如果您坚持使用本地主机(例如,在与 tomcat 相同的服务器上安装 Apache httpd),这很可能是安全的:如果您不信任“本地主机”网络的实现,您就无法信任 TLS 实现同样的服务器。
您可以通过将 Apache 安装在与 tomcat 不同的服务器上来提高性能。在那种情况下,您显然依赖于两者之间的网络:路由器、电缆等。如果您不信任您的网络,这可能是您可以解决的问题。但是,请注意,您可能还在 tomcat 和文件系统(临时文件)、数据库等之间建立了某种联系 - 如果传输加密已确定,如果您不信任您的数据中心/网络安全,数据仍可能从该应用程序中泄漏。
我们无法判断您可以信任您的网络的级别,您必须自己做。
请注意,在您在问题中提到的情况下,当您只是在 http 上转发时,tomcat 将不知道已在 https 中建立连接(例如:浏览器 -> Apache 是 https,Apache -> tomcat 是 http)
您可以将 tomcat 的连接器配置为假定连接是安全的(查找 connector's documentation 上的 secure
属性),但这也意味着您绝对需要确保绝不允许要转发到该连接器的 http 连接。检查 AJP(一种不同的协议(protocol))是否适合您 - 它会将所有 HTTP(S) 连接的属性正确转发给 tomcat。有些人喜欢(我也在其中),有些人不喜欢。
关于java - httpd和tomcat之间的通信安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29941595/