0

我有一个基于 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 应用程序中处理这个问题?如果是,如何?

在侦听单端口时有什么选择吗?

谢谢。

4

1 回答 1

0

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

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

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

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

于 2020-11-29T13:47:27.677 回答