Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
<img src="//i.stack.imgur.com/RUiNP.png" height="16" width="18" alt="" class="sponsor tag img">elasticsearch 将HTTP请求重定向到netty中的HTTPS_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Netty - Fatal编程技术网 elasticsearch 将HTTP请求重定向到netty中的HTTPS,elasticsearch,netty,elasticsearch,Netty" /> elasticsearch 将HTTP请求重定向到netty中的HTTPS,elasticsearch,netty,elasticsearch,Netty" />

elasticsearch 将HTTP请求重定向到netty中的HTTPS

elasticsearch 将HTTP请求重定向到netty中的HTTPS,elasticsearch,netty,elasticsearch,Netty,我正在修改elasticsearch代码,以便在不使用x-pack和反向代理的情况下配置HTTPS。 我修改了netty4HttpServerTransport文件中的initchannel()方法,https工作正常,但我想将http重定向到https。。 代码是 char[] password = "your5663".toCharArray(); KeyStore ks = KeyStore.getInstance("JKS"); ks.load(new F

我正在修改elasticsearch代码,以便在不使用x-pack和反向代理的情况下配置HTTPS。 我修改了netty4HttpServerTransport文件中的initchannel()方法,https工作正常,但我想将http重定向到https。。 代码是

char[] password = "your5663".toCharArray();
        KeyStore ks = KeyStore.getInstance("JKS");
        ks.load(new FileInputStream("C:/OpenSSL-Win64/bin/keystore1.jks"),password);

        KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
        kmf.init(ks, password);

        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(ks);
        TrustManager[] tm = tmf.getTrustManagers();

        SSLContext sslContext  = SSLContext.getInstance("TLSv1.3");
        sslContext .init( kmf.getKeyManagers(), tm, null);
        SSLEngine sslengine = sslContext .createSSLEngine();

        sslengine.setUseClientMode(false);

        String[] DEFAULT_PROTOCOLS = { "TLSv1", "TLSv1.1", "TLSv1.2","TLSv1.3" };
        String[] DEFAULT_CIPHERS = {"TLS_RSA_WITH_AES_128_CBC_SHA256", "TLS_RSA_WITH_AES_128_CBC_SHA"};

        sslengine.setEnabledProtocols(DEFAULT_PROTOCOLS);
        sslengine.setEnabledCipherSuites(DEFAULT_CIPHERS);

        SslHandler sslHandler = new SslHandler(sslengine);
        ch.pipeline().addLast("ssl", sslHandler);      
        ch.pipeline().addAfter("ssl","handshake",new StringEventHandler());

在这段代码中,如何使http到https重定向。

重定向在有效负载(http)级别工作,而不是ssl传输级别。您需要同时在协议(http和https)和http通道上侦听,您可以使用重定向状态代码进行响应。长话短说——在代码中没有直接的位置可以做到这一点

此任务通常使用代理服务器。我不确定您是否可以在elasticsearch中执行此操作,您可以尝试配置一个过滤器servlet来检查协议是否响应重定向。这可能会有帮助


另一个事实——如果重定向是针对服务客户端(而不是基于浏览器的UI),则客户端可能/将考虑重定向响应和错误响应。取决于您的环境-也许您可以公开ssl端点(无重定向),客户端将必须遵守重定向工作在有效负载(http)级别,而不是ssl传输级别。您需要同时在协议(http和https)和http通道上侦听,您可以使用重定向状态代码进行响应。长话短说——在代码中没有直接的位置可以做到这一点

此任务通常使用代理服务器。我不确定您是否可以在elasticsearch中执行此操作,您可以尝试配置一个过滤器servlet来检查协议是否响应重定向。这可能会有帮助


另一个事实——如果重定向是针对服务客户端(而不是基于浏览器的UI),则客户端可能/将考虑重定向响应和错误响应。取决于您的环境-也许您可以只公开ssl端点(无重定向),客户端必须遵守

Netty为此提供了内置处理程序

您将其放在管道的前端,它会检测消息是否加密。如果是,则消息将发送到正常的SSL管道,如果不是,则可以指定其他地方发送消息,例如,到301重定向到https

您可以使用这个Netty版本,也可以创建自己的处理程序来执行类似的操作

但是,要使用Netty版本,您需要稍微重构以生成NettySslContext
io.Netty.handler.ssl.SslContext
,而不是SSLEngine

大概是这样的:

char[] password = "your5663".toCharArray();
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("C:/OpenSSL-Win64/bin/keystore1.jks"),password);

KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, password);

SslContext sslContext = SslContextBuilder.forServer(keyManagerFactory).build();

ch.pipeline().addLast("ssl", sslHandler);

// this is an imaginary handler you create that sends HTTP a 301 to HTTPS
// non-SSL can be detected easily because there is no SslHandler on this channel
ch.pipeline().addLast("redirectHandler", new RedirectHandler()); 

ch.pipeline().addLast("handshake",new StringEventHandler());

Netty对此有一个内置的处理程序

您将其放在管道的前端,它会检测消息是否加密。如果是,则消息将发送到正常的SSL管道,如果不是,则可以指定其他地方发送消息,例如,到301重定向到https

您可以使用这个Netty版本,也可以创建自己的处理程序来执行类似的操作

但是,要使用Netty版本,您需要稍微重构以生成NettySslContext
io.Netty.handler.ssl.SslContext
,而不是SSLEngine

大概是这样的:

char[] password = "your5663".toCharArray();
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("C:/OpenSSL-Win64/bin/keystore1.jks"),password);

KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, password);

SslContext sslContext = SslContextBuilder.forServer(keyManagerFactory).build();

ch.pipeline().addLast("ssl", sslHandler);

// this is an imaginary handler you create that sends HTTP a 301 to HTTPS
// non-SSL can be detected easily because there is no SslHandler on this channel
ch.pipeline().addLast("redirectHandler", new RedirectHandler()); 

ch.pipeline().addLast("handshake",new StringEventHandler());