如何配置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。
- ServerConnector with Client Auth -
/resource1/*
内容从这里提供
- 没有客户端身份验证的 ServerConnector - 所有其他不需要客户端身份验证要求的网络资源(甚至没有
/resource1/*
内容)
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。
- ServerConnector with Client Auth -
/resource1/*
内容从这里提供 - 没有客户端身份验证的 ServerConnector - 所有其他不需要客户端身份验证要求的网络资源(甚至没有
/resource1/*
内容)