如何配置jetty为指定资源请求客户端证书?

How to configure jetty to request client certificate for specified resources?

ssl配置:

<New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
    <Set name="KeyStorePath">../conf/jetty/etc/keystore</Set>
    <Set name="KeyStorePassword">secretpass</Set>
    <Set name="KeyManagerPassword">test</Set>
    <Set name="TrustStorePath">../conf/jetty/etc/truststore</Set>
    <Set name="TrustStorePassword">secretpass</Set>
    <Set name="EndpointIdentificationAlgorithm"></Set>
    <Set name="NeedClientAuth">true</Set>
    <Set name="WantClientAuth">true</Set>
</New>

将 NeedClientAuth 设置为 true 要求客户端为所有资源提供证书。但就我而言,我只想为指定资源申请证书。

例如我需要为/resource1/*申请证书 并且只对 /resource2/*

使用 HTTPS

我怎样才能做到这一点?

不可能,因为 SSL/TLS 协商步骤发生在实际发出请求之前。

没有 Web 服务器可以根据请求的资源应用不同的 SSL/TLS 规则,因为在 SSL/TLS 协商时甚至还没有发送 http 请求中的信息.

如果这很重要,请在不同的端口上设置 2 个不同的 ServerConnector。

  1. ServerConnector with Client Auth - /resource1/* 内容从这里提供
  2. 没有客户端身份验证的 ServerConnector - 所有其他不需要客户端身份验证要求的网络资源(甚至没有 /resource1/* 内容)