Tomcat + SNI +相互认证

时间:2016-07-15 10:40:28

标签: tomcat ssl sni mutual-authentication

我知道Tomcat提供SNI和相互身份验证,但是是否可以仅为选定的应用程序/路径启用MA?即假设我的服务器上有以下应用程序/端点:

/app1
/app2/human
/app2/robot

其中 / app2 / human 由人使用, / app2 / robot 由机器人,计算机和其他设备使用(例如/ app2 / human提供HTML和/ app2 / robot提供JSON)。现在,我可以通过SSL在没有MA的情况下以某种方式配置Tomcat接受与 / app1 / app2 / human 的连接,并且仅限于 / app2 / robot 如果客户提出有效证书?

我当然希望不为每个应用程序配置单独的端口/连接器,这很容易。

提前致谢。

2 个答案:

答案 0 :(得分:1)

根据this并通过阅读文档,您无法在每个路径上进行选择性的相互身份验证。它是全部或全无,因为客户端身份验证是在连接器级别配置的。您可能正在寻找可能未实现的SSL renegotation with client auth,因为您可能习惯使用Apache HTTPd。

答案 1 :(得分:1)

Tomcat不为不同的路径提供选择性相互身份验证,但如果您只需要在webapp级别(而不是在特定Web应用程序内)应用此类选择性相互身份验证,则可能是能够为特殊的Web应用程序单独<Connector>而逃脱。这需要单独的<Service>,因此需要<Host>,当然还需要不同的端口号(除非您碰巧有一个单独的网络接口可用于保留端口)。

我还没有尝试过,但我想,理论上,可以配置SNI + client-auth,以便特定主机名具有不同的客户端身份验证要求,但Tomcat中没有这样的代码目前支持。

可以将Tomcat配置为使用不同的信任库以及每个主机名不同的certificateVerification设置,但不允许您为每个路径更改

另一种选择是将Tomcat配置为“想要”(甚至要求)客户端证书,然后使用Filter自行执行检查。 Filter可以基于每个路径应用,并且您的应用程序变得更加可移植,因为您不依赖于某些特定于Tomcat的功能。

看看这个帖子几年前我是怎么做到的。 (最终)有一些示例代码以及大量有关如何将所有信息汇总到一起的参考资料:http://markmail.org/thread/vxwwli5nzt4itfr2