Skip to content

Commit 2bef10c

Browse files
authored
Fix Netty4 header verifier inbound handler to deal with upgrade requests (opensearch-project#5045)
Signed-off-by: Andriy Redko <[email protected]>
1 parent 34735bb commit 2bef10c

File tree

2 files changed

+12
-23
lines changed

2 files changed

+12
-23
lines changed

src/main/java/org/opensearch/security/ssl/http/netty/Netty4HttpRequestHeaderVerifier.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,12 @@
3030
import io.netty.channel.ChannelHandler.Sharable;
3131
import io.netty.channel.ChannelHandlerContext;
3232
import io.netty.channel.SimpleChannelInboundHandler;
33-
import io.netty.handler.codec.http.DefaultHttpRequest;
3433
import io.netty.handler.codec.http.HttpRequest;
3534
import io.netty.util.AttributeKey;
3635
import io.netty.util.ReferenceCountUtil;
3736

3837
@Sharable
39-
public class Netty4HttpRequestHeaderVerifier extends SimpleChannelInboundHandler<DefaultHttpRequest> {
38+
public class Netty4HttpRequestHeaderVerifier extends SimpleChannelInboundHandler<HttpRequest> {
4039
public static final AttributeKey<Boolean> IS_AUTHENTICATED = AttributeKey.newInstance("opensearch-http-is-authenticated");
4140
public static final AttributeKey<Boolean> SHOULD_DECOMPRESS = AttributeKey.newInstance("opensearch-http-should-decompress");
4241
public static final AttributeKey<ThreadContext.StoredContext> CONTEXT_TO_RESTORE = AttributeKey.newInstance(
@@ -67,7 +66,7 @@ public Netty4HttpRequestHeaderVerifier(SecurityRestFilter restFilter, ThreadPool
6766
}
6867

6968
@Override
70-
public void channelRead0(ChannelHandlerContext ctx, DefaultHttpRequest msg) throws Exception {
69+
public void channelRead0(ChannelHandlerContext ctx, HttpRequest msg) throws Exception {
7170
// DefaultHttpRequest should always be first and contain headers
7271
ReferenceCountUtil.retain(msg);
7372

src/test/java/org/opensearch/security/test/helper/rest/RestHelper.java

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import java.util.regex.Matcher;
4040
import java.util.regex.Pattern;
4141
import javax.net.ssl.SSLContext;
42-
import javax.net.ssl.SSLEngine;
4342

4443
import com.fasterxml.jackson.core.JsonProcessingException;
4544
import com.fasterxml.jackson.databind.JsonNode;
@@ -64,10 +63,9 @@
6463
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
6564
import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManagerBuilder;
6665
import org.apache.hc.client5.http.nio.AsyncClientConnectionManager;
67-
import org.apache.hc.client5.http.ssl.ClientTlsStrategyBuilder;
66+
import org.apache.hc.client5.http.ssl.DefaultClientTlsStrategy;
6867
import org.apache.hc.client5.http.ssl.NoopHostnameVerifier;
6968
import org.apache.hc.core5.concurrent.FutureCallback;
70-
import org.apache.hc.core5.function.Factory;
7169
import org.apache.hc.core5.http.ConnectionClosedException;
7270
import org.apache.hc.core5.http.ContentType;
7371
import org.apache.hc.core5.http.Header;
@@ -78,8 +76,7 @@
7876
import org.apache.hc.core5.http.ProtocolVersion;
7977
import org.apache.hc.core5.http.io.entity.EntityUtils;
8078
import org.apache.hc.core5.http.io.entity.StringEntity;
81-
import org.apache.hc.core5.http.nio.ssl.TlsStrategy;
82-
import org.apache.hc.core5.reactor.ssl.TlsDetails;
79+
import org.apache.hc.core5.reactor.ssl.SSLBufferMode;
8380
import org.apache.hc.core5.ssl.SSLContextBuilder;
8481
import org.apache.hc.core5.ssl.SSLContexts;
8582
import org.apache.hc.core5.util.Timeout;
@@ -363,27 +360,20 @@ protected final CloseableHttpAsyncClient getHTTPClient() throws Exception {
363360
protocols = new String[] { "TLSv1", "TLSv1.1", "TLSv1.2" };
364361
}
365362

366-
final TlsStrategy tlsStrategy = ClientTlsStrategyBuilder.create()
367-
.setSslContext(sslContext)
368-
.setTlsVersions(protocols)
369-
.setHostnameVerifier(NoopHostnameVerifier.INSTANCE)
370-
// See please https://issues.apache.org/jira/browse/HTTPCLIENT-2219
371-
.setTlsDetailsFactory(new Factory<SSLEngine, TlsDetails>() {
372-
@Override
373-
public TlsDetails create(final SSLEngine sslEngine) {
374-
return new TlsDetails(sslEngine.getSession(), sslEngine.getApplicationProtocol());
375-
}
376-
})
377-
.build();
363+
final DefaultClientTlsStrategy tlsStrategy = new DefaultClientTlsStrategy(
364+
sslContext,
365+
protocols,
366+
null,
367+
SSLBufferMode.STATIC,
368+
NoopHostnameVerifier.INSTANCE
369+
);
378370

379371
final AsyncClientConnectionManager cm = PoolingAsyncClientConnectionManagerBuilder.create().setTlsStrategy(tlsStrategy).build();
380372

381373
hcb.setConnectionManager(cm);
382374
}
383375

384-
final RequestConfig.Builder requestConfigBuilder = RequestConfig.custom()
385-
.setResponseTimeout(Timeout.ofSeconds(60))
386-
.setProtocolUpgradeEnabled(false);
376+
final RequestConfig.Builder requestConfigBuilder = RequestConfig.custom().setResponseTimeout(Timeout.ofSeconds(60));
387377

388378
return hcb.setDefaultRequestConfig(requestConfigBuilder.build()).disableAutomaticRetries().build();
389379
}

0 commit comments

Comments
 (0)