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

标签 ssl jetty ssl-certificate client-certificates

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/* 内容)

关于ssl - 如何配置jetty为指定资源请求客户端证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42024458/

相关文章:

ios - 将 SSL https 与 socket.io 和 swift 一起用于 iOS 应用程序

security - API 安全 - 发送 CC 信息

C# 应用程序无法建立 SSL/TLS 连接

java - Camel CXFRS - 空附件

java - 使用嵌入式 Jetty 提供静态文件

asp.net - Web API 中的客户端证书和基于声明的身份

amazon-web-services - 使用 Application Load Balancer 将 http 重定向到 https

sql-server - 带有 SQL Server 2017 数据源的 Jetty

java - 收到致命警报:SSLHandshakeException中的handshake_failure

c#-4.0 - 如何绕过 CefSharp WinForms SSL 错误