Перенаправить HTTP-запросы на HTTPS в Netty - PullRequest
0 голосов
/ 21 марта 2019

Я изменяю кодasticsearch для настройки HTTPS без x-pack и обратных прокси. Я изменил метод initchannel () в файле netty4HttpServerTransport, 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 в этом коде.

1 Ответ

1 голос
/ 21 марта 2019

Перенаправление работает на уровне полезной нагрузки (http), а не на уровне транспорта ssl.Вам нужно будет прослушивать как протокол (http и https), так и канал http, на который вы можете ответить кодом состояния перенаправления.Короче говоря - в вашем коде нет прямого места, где вы можете это сделать.

Очень часто для этой задачи используется прокси-сервер.Я не уверен, что если вы можете сделать это вasticsearch, вы можете попытаться настроить сервлет фильтра, чтобы проверить, отвечает ли протокол перенаправлением.Это может быть полезно https://github.com/elastic/elasticsearch-transport-wares

Еще один факт - если перенаправление предназначено для сервисных клиентов (не на основе браузера), клиенты могут / будут считать ответ перенаправления ошибочным ответом.В зависимости от вашей среды - может быть, вы можете просто предоставить конечную точку ssl (без перенаправлений), и клиенты должны будут соответствовать

...