如何为某个 URL 禁用相互认证
How to disable Mutual Authentication for a certain URL
我正在做一个项目,我们使用以下配置配置了当前的 Jetty 服务器:
SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStorePath(tlsCfg.tlsKeystoreLocation);
sslContextFactory.setKeyStorePassword(tlsCfg.tlsKeystorePassword);
sslContextFactory.setNeedClientAuth(tlsCfg.useMutualAuth);
sslContextFactory.setIncludeProtocols("TLSv1.2", "TLSv1.3");
// cipher suites that are not secure are properly removed by default constructor.
if (tlsCfg.useMutualAuth) {
sslContextFactory.setTrustStorePath(tlsCfg.tlsTruststoreLocation);
sslContextFactory.setTrustStorePassword(tlsCfg.tlsTruststorePassword);
}
JettyHttpContainerFactory.createServer(getSecureBaseURI(port), sslContextFactory, rc);
我们的应用程序具有如下所示的状态资源:
@Path("status")
public class StatusResource {
@Autowired(required = false) // optional dependencies are not supported by @Inject
public StatusResource(Supplier<List<Status>> subStatusesSupplier) {
this.subStatusesSupplier = subStatusesSupplier;
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public Status status() {
...
return status;
}
}
如果此端点(且仅此端点)不需要 MutalAuthentication 和 Tls 设置,那么对于我们的运营团队将非常有帮助。
是否有从整个 SslContextFactory 中排除一个端点的选项?
不可能。
TLS/SSL 发生在请求发出之前。
该请求包含您要限制相互身份验证的端点的 URI。
实现此目的的唯一方法是使用 2 个 ServerConnector,每个都有自己的 SslContextFactory
,一个具有相互身份验证,一个没有。
我正在做一个项目,我们使用以下配置配置了当前的 Jetty 服务器:
SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setKeyStorePath(tlsCfg.tlsKeystoreLocation);
sslContextFactory.setKeyStorePassword(tlsCfg.tlsKeystorePassword);
sslContextFactory.setNeedClientAuth(tlsCfg.useMutualAuth);
sslContextFactory.setIncludeProtocols("TLSv1.2", "TLSv1.3");
// cipher suites that are not secure are properly removed by default constructor.
if (tlsCfg.useMutualAuth) {
sslContextFactory.setTrustStorePath(tlsCfg.tlsTruststoreLocation);
sslContextFactory.setTrustStorePassword(tlsCfg.tlsTruststorePassword);
}
JettyHttpContainerFactory.createServer(getSecureBaseURI(port), sslContextFactory, rc);
我们的应用程序具有如下所示的状态资源:
@Path("status")
public class StatusResource {
@Autowired(required = false) // optional dependencies are not supported by @Inject
public StatusResource(Supplier<List<Status>> subStatusesSupplier) {
this.subStatusesSupplier = subStatusesSupplier;
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public Status status() {
...
return status;
}
}
如果此端点(且仅此端点)不需要 MutalAuthentication 和 Tls 设置,那么对于我们的运营团队将非常有帮助。
是否有从整个 SslContextFactory 中排除一个端点的选项?
不可能。
TLS/SSL 发生在请求发出之前。
该请求包含您要限制相互身份验证的端点的 URI。
实现此目的的唯一方法是使用 2 个 ServerConnector,每个都有自己的 SslContextFactory
,一个具有相互身份验证,一个没有。