0

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

/app1
/app2/human
/app2/robot

其中/app2/human被人类使用,/app2/robot被机器人、计算机和其他设备使用(例如 /app2/human 服务 HTML 和 /app2/robot 服务 JSON)。现在,我是否可以以某种方式将 Tomcat 配置为通过 SSL 接受与/app1/app2/human 的连接而无需 MA 以及仅在客户端提供有效证书的情况下与/app2/robot的连接?

当然,我想在不为每个应用程序配置单独的端口/连接器的情况下做到这一点,这很容易。

提前致谢。

4

2 回答 2

1

根据这一点并通过阅读文档,您不能在每个路径的基础上进行选择性相互身份验证。这是全部或全部,因为客户端身份验证是在连接器级别配置的。您可能正在寻找与客户端身份验证的 SSL 重新协商,这可能未实现,因为您可能习惯于从 Apache HTTPd 实现。

于 2016-07-15T12:16:40.093 回答
1

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

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

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

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

看看这个线程,了解我几年前是如何做到的。(最终)有一些示例代码以及很多关于我如何将所有信息放在一起的参考:http: //markmail.org/thread/vxwwli5nzt4itfr2

于 2016-07-15T14:25:33.330 回答