在Jetty中,如何仅在API的子集上支持证书身份验证

问题描述 投票:0回答:1

我正在构建一个Web服务,并使用Jetty作为服务器。对于此服务提供的某些API,我们希望它们通过证书进行身份验证。所以我有以下代码:

SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setWantClientAuth(true);

Server server = new Server(pool);
ServerConnector sslConnector = new ServerConnector(server,
        new SslConnectionFactory(sslContextFactory, "HTTP/1.1"),
        new HttpConnectionFactory(httpsConfig));

server.addConnector(sslConnector);

现在,我的服务还有一个相应的Web UI。当用户访问后续调用后端API的Web UI时,浏览器会提示用户输入证书。我不希望发生这种情况,因为Web UI调用的API不支持证书身份验证。但是,上面的代码是以全局方式配置的。有什么方法可以解决这个问题吗?

更新:

我看过其他服务器实现。例如,在ASP.NET中,我们可以定义以下配置:

<location path="some-api">
    <system.webServer>
        <security>
            <access sslFlags="SslNegotiateCert"/>
        </security>
    </system.webServer>
 </location>

Apache Http Server中还有similar settings

所以似乎SSL / TLS本身并没有禁止我这样做。我错过了任何码头设置吗?

ssl jetty client-certificates
1个回答
2
投票

TLS级别证书验证发生在甚至发送/处理/解析HTTP请求之前。

在TLS握手之后,不可能基于信息跳过该验证。

作为替代方法,您可以将证书验证放在同一台计算机上的不同端口上(使用不同的ServerConnector配置),而不使用客户端证书验证的普通连接器。

© www.soinside.com 2019 - 2024. All rights reserved.