Vertx 服务器设置每个路由的相互身份验证要求

Vertx Server Set Mutual Auth Requirement Per Route

我有一个基于 Vertx (3.9.x) 的 HTTP 服务器,我需要在其中满足两组请求路径。第一条路径始终需要客户端证书 (ClientAuth.REQUIRED),而另一条路径的客户端证书是可选的(ClientAuth.REQUESTClientAuth.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 应用程序中处理此问题?如果是,怎么做?

在单端口监听时有没有其他选择?

谢谢。

经过更多研究,我最终得到了 中的建议。简而言之,“我无法根据 URL 的路径更改 SSL 配置,因为它仅在建立 SSL 连接后才可用”。

解决方案是,我可以在开头为需要客户端证书(相互身份验证)的路径设置另一个处理程序,并在那里验证客户端证书,如下所示:

router.route("/required-client-cert/")
          .handler(clientCertHandler::validateClientCert)
          .handler(this::handleMutualAuth);

PS:另一种方法是配置不同的端口来监听需要相互认证的请求。但是,在我的情况下,配置另一个端口不是一个选项。