在Tomcat中扩展阀门

Dennis Jacob

英文演讲 2022-07-30 15:20 GMT+8  #webserverandtomcat

在Tomcat中,阀门充当请求预处理机制。可以通过扩展基本的Valve Class来开发定制阀门,以集成Tomcat服务器接受的请求的附加功能。请求速率限制、实现增强的mTLS安全性、调试机制等都是一些示例,在这些示例中,可以利用定制的Tomcat valve来扩展Tomcat的功能。

可以开发一个定制的Tomcat Valve来实现增强的mTLS安全性,因为Tomcat应用服务器作为API网关工作,只接受和处理来自可信客户端的请求。Tomcat连接器允许使用SSLHostConfig部分上的属性通过双向TLS握手保护入站通信。然而,这种方法仍然不能被认为是非常安全的通信方法。Tomcat可以接受来自任何提供有效证书作为双向TLS握手一部分的客户机的请求,只要客户机提供的证书可以信任在Tomcat上配置的CA信任链。可以开发一个自定义的Valve,它检查客户端证书参数,如证书区别名称(DN)或证书序列号,以确保请求确实来自提供正确证书的客户端。可区分名称或客户端序列号可以安全地存储在Tomcat中,作为一组客户端证书的白名单,并且只有那些提供有效证书的客户端才能在Tomcat中接受请求处理。

速率限制是可以使用定制Tomcat阀门的另一个领域。速率限制限制部署在Tomcat上的应用程序可以处理的请求数量。这可以通过开发一个定制的Tomcat Valve来实现,它可以与谷歌Guava API库提供的速率限制功能集成在一起。谷歌Guava RateLimiter提供了基于令牌桶算法实现的流量节流。对于到达Tomcat的每个传入请求,都根据令牌可用性进行验证,以确保维护已设置的通信速率。如果入站请求速率大于在Valve设置的速率,请求将被一个自定义响应代码拒绝。通过动态设置速率限制,可以进一步增强自定义Tomcat Valve的这种速率限制功能,从而避免在设置新的速率时重新启动Tomcat应用服务器。这可以通过使用某些控制器请求来实现,这些请求也将由同一个Valve处理,并在确保控制器请求被验证后动态地设置新的速率限制。当需要动态流量请求限制时,这将是非常有用的功能。

调试也是自定义Tomcat valve的一个有用的应用领域。Tomcat已经提供了一些阀门,比如Header Dumper Valve,它可以转储头值。但是,可以开发定制的Tomcat valve来捕获和转储请求内容、会话详细信息、证书参数,包括过期日期(只有在启用了客户端身份验证的情况下),而不是转储头详细信息。当需要进行故障排除以查看请求细节时,这将非常有用。

阀门是Tomcat中的一种强大机制,它利用了Tomcat请求处理管道的功能。Tomcat valve的功能可以通过定制阀门进行扩展,以满足如上所述的不同用例。

Speakers:


Dennis Jacob: Apache APISIX, 签证, 我目前在一家领先的支付技术组织担任中间件工程的高级顾问,拥有18年的IT经验。除了中间件工程,我的兴趣还包括应用程序安全和本地云技术。我热衷于尝试最新的技术进步,并向社区和当地团体发表演讲。