Создание сервера TLS / SSL с помощью HttpsServer - PullRequest
2 голосов
/ 06 января 2020

Я пытался весь день сделать сервер TLS / SSL HTTPS с java. Кто-нибудь может мне помочь?

Это мой код

static class MyHandler implements HttpHandler {
    @Override
    public void handle(HttpExchange t) throws IOException {
        System.out.println("called");
        String response = "This is the response";
        t.sendResponseHeaders(200, response.length());
        OutputStream os = t.getResponseBody();
        os.write(response.getBytes());
        os.close();
    }
}

static HttpsServer server = null;
static int port = 9000;

public static void main(String[] args) throws Exception {
    String keystoreFilename = "/home/kratess/" + "mykey.keystore";
    char[] storepass = "mypassword".toCharArray();
    char[] keypass = "mypassword".toCharArray();
    String alias = "alias";
    FileInputStream fIn = new FileInputStream(keystoreFilename);
    KeyStore keystore = KeyStore.getInstance("JKS");
    keystore.load(fIn, storepass);

    // display certificate
    Certificate cert = keystore.getCertificate(alias);
    System.out.println(cert);

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

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



    server = HttpsServer.create(new InetSocketAddress(port), 0);

    // create ssl context
    SSLContext sslContext = SSLContext.getInstance("TLSv1.2");

    // setup the HTTPS context and parameters
    sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
    server.setHttpsConfigurator(new HttpsConfigurator(sslContext) {
        public void configure(HttpsParameters params) {
            try {
                // initialise the SSL context
                SSLContext c = SSLContext.getDefault();
                SSLEngine engine = c.createSSLEngine();
                params.setNeedClientAuth(true);
                params.setCipherSuites(engine.getEnabledCipherSuites());
                params.setProtocols(engine.getEnabledProtocols());
                // get the default parameters
                SSLParameters defaultSSLParameters = c.getDefaultSSLParameters();
                params.setSSLParameters(defaultSSLParameters);
            } catch (Exception ex) {
                ex.printStackTrace();
                System.out.println("Failed to create HTTPS server");
            }
        }
    });

    System.out.println("server started at " + port);
    server.createContext("/test", new MyHandler());
    server.setExecutor(null);

    server.start();
}

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

Chrome дает этот ответ ERR_EMPTY_RESPONSE

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...