我有一个基于vertx(3.9.x)的http服务器,其中需要满足两组请求路径。第一条路径总是需要客户端证书( ClientAuth.REQUIRED
)另一个客户端证书是可选的( ClientAuth.REQUEST
或者 ClientAuth.NONE
).
正如我所见,唯一的地方 ClientAuth
可以设置为 HttpServerOptions
,并绑定到特定端口,下面是示例代码段:
final HttpServerOptions options = new HttpServerOptions()
.setPort(443)
.setClientAuth(ClientAuth.REQUIRED) // One option per listening port.
// Set all other server options
路由器配置如下:
final Router router = Router.router(vertx);
router.route("/required-client-cert/").handler(this::handleMutualAuth);
router.route("/no-need-client-cert/").handler(this::handleRegularAuth);
// Any one of the above routes can work anytime, because ClientAuth is configured in server options.
是否可以在单个vertx应用程序中处理此问题?如果是,怎么做?
在单端口监听时,是否有其他选择?
谢谢。
1条答案
按热度按时间2mbi3lxu1#
经过更多的研究,我得出了这篇文章的建议。简而言之,“我不能根据url的路径改变ssl配置,因为它只有在ssl连接建立之后才可用”。
解决方案是,我可以在开始时为需要客户端证书(mutual auth)的路径设置另一个处理程序,并在那里验证客户端证书,如下所示:
另一种方法是配置一个不同的端口来监听需要相互身份验证的请求。但是,在我的例子中,配置另一个端口不是一个选项。