HttpHandler не вызывается при использовании HttpsServer - Java - PullRequest
0 голосов
/ 06 января 2020

Как и заголовок. HttpHandle не вызывается, и страница http://localhost: 9001 / выдает эту ошибку ERR_EMPTY_RESPONSE

public static class MyHandler implements HttpHandler {
    @Override
    public void handle(HttpExchange t) throws IOException {
        System.out.println("call me");
        String response = "This is the response";
        HttpsExchange httpsExchange = (HttpsExchange) t;
        t.getResponseHeaders().add("Access-Control-Allow-Origin", "*");
        t.sendResponseHeaders(200, response.getBytes().length);
        OutputStream os = t.getResponseBody();
        os.write(response.getBytes());
        os.close();
    }
}

public static void main(String[] args) throws Exception {

    try {
        // setup the socket address
        InetSocketAddress address = new InetSocketAddress(9001);

        // initialise the HTTPS server
        HttpsServer httpsServer = HttpsServer.create(address, 0);
        SSLContext sslContext = SSLContext.getInstance("TLS");

        // initialise the keystore
        char[] password = "mypassword".toCharArray();
        KeyStore ks = KeyStore.getInstance("JKS");
        FileInputStream fis = new FileInputStream("D:/desktop/mykey.keystore");
        ks.load(fis, password);

        // setup the key manager factory
        KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
        kmf.init(ks, password);

        // setup the trust manager factory
        TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
        tmf.init(ks);

        // setup the HTTPS context and parameters
        sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
        httpsServer.setHttpsConfigurator(new HttpsConfigurator(sslContext) {
            public void configure(HttpsParameters params) {
                try {
                    System.out.println(params.getClientAddress().toString());
                    // initialise the SSL context
                    SSLContext context = getSSLContext();
                    SSLEngine engine = context.createSSLEngine();
                    params.setNeedClientAuth(false);
                    params.setCipherSuites(engine.getEnabledCipherSuites());
                    params.setProtocols(engine.getEnabledProtocols());

                    // Set the SSL parameters
                    SSLParameters sslParameters = context.getSupportedSSLParameters();
                    params.setSSLParameters(sslParameters);

                } catch (Exception ex) {
                    System.out.println("Failed to create HTTPS port");
                }
            }
        });
        httpsServer.createContext("/", new MyHandler());
        httpsServer.setExecutor(null); // creates a default executor
        httpsServer.start();

    } catch (Exception exception) {
        System.out.println("Failed to create HTTPS server on port " + 9001 + " of localhost");
        exception.printStackTrace();

    }
}

Сервер запускается, но сертификат не работает на chrome , Печать сертификата в консоли завершена.

Chrome дает ответ ERR_EMPTY_RESPONSE

Кроме того, HttpHandler не вызывается.

Где я ошибаюсь? Если это решение не работает, может кто-нибудь предложить мне, что я должен использовать? Мне нужно кодировать этот HTTPS для создания страницы WebHook (требуется SSL)

...