Java 如何加密三层体系结构的通信

Java 如何加密三层体系结构的通信,java,apache,security,jakarta-ee,3-tier,Java,Apache,Security,Jakarta Ee,3 Tier,我有一个两层架构的JavaEE应用程序。第1层有一个处理https请求并提供内容的TOME,它依赖于第2层中的oracle数据库 由于DB连接可以设置为安全的,而且我使用的是https,所以它非常安全(至少在这两个方面) 现在,我需要将这个应用程序移植到一个三层架构中,所有通道都必须是安全的。我的第一个想法是将tomEE移动到中间层,并在第一层添加一些ApacheHTTPD作为反向代理 问题是第一层和第二层之间的通信。如果我理解的很好,https是通过设计一个协议来确保没有MITM攻击,所以ht

我有一个两层架构的JavaEE应用程序。第1层有一个处理https请求并提供内容的TOME,它依赖于第2层中的oracle数据库

由于DB连接可以设置为安全的,而且我使用的是https,所以它非常安全(至少在这两个方面)

现在,我需要将这个应用程序移植到一个三层架构中,所有通道都必须是安全的。我的第一个想法是将tomEE移动到中间层,并在第一层添加一些ApacheHTTPD作为反向代理

问题是第一层和第二层之间的通信。如果我理解的很好,https是通过设计一个协议来确保没有MITM攻击,所以httpd不能转发https

OTOH,如果两个httpd都有自己的SSL证书,我可以对通信进行加密,但是这些证书的管理并不是一件小事

我可以从第一层和第二层打开一个SSL隧道,这样TomEE就可以在普通http上运行,让httpd处理HTTPS,但我不确定这个解决方案是否会扩展或影响性能

或者我可以尝试一些EJB到EJB的通信,使用第1层中的另一个TomEE:-)但这似乎不正确


解决这种情况的最佳方法是什么?

出于好奇:为什么需要将应用程序从2层转换为3层?听起来您的应用程序已经是3层了。或者您是否完全缺少表示层(或业务逻辑)?在负载平衡器或反向代理上终止SSL是一种非常常见的方法。这样您甚至可以获得更好的性能。这当然很容易扩展,因为它们非常轻量级,您可以在任何层上独立地进行水平扩展。@Thomas应用程序必须遵循客户端的硬件design@KayamantomEE服务于JSF,并包含作为EJB的事务逻辑,因此从某种意义上讲,这两个层位于一台机器中是正确的。如果您知道分离这两部分的好方法,这可能也是一个好的解决方案。