Erstellen Sie einen HTTPS-Server in Java

Sheeraz Gul 12 Oktober 2023
Erstellen Sie einen HTTPS-Server in Java

Das Secure Hypertext Transfer Protocol (HTTPS) ist ein gesichertes Protokoll, das eine sichere Kommunikation über das Internet gewährleistet. HTTPS verwendet ein Paar privater Schlüssel und ein digitales Zertifikat, um den Empfänger und den Absender zu verifizieren.

Dieses Tutorial demonstriert das Erstellen eines einfachen HTTPS-Servers in Java.

Erstellen Sie einen HTTPS-Server in Java

Bevor wir einen HTTPS-Server in JAVA erstellen, müssen wir sicherstellen, dass wir den Keystore und den Truststore generiert haben, die der Server verwenden wird. Führen Sie die folgenden Schritte aus, um sie zu generieren:

  1. Öffnen Sie die Eingabeaufforderung als Administrator.

  2. Wechseln Sie in cmd zum Pfad des Java-bin-Verzeichnisses.

  3. Führen Sie nun den folgenden Befehl aus:

    keytool -genkeypair -keyalg RSA -alias selfsigned -keystore testkey.jks -storepass password -validity 360 -keysize 2048
    
  4. Dieser Befehl fragt Sie nach Ihrem Nachnamen, Ihrer Organisationseinheit, Ihrer Organisation, Ihrer Stadt, Ihrem Bundesland und Ihrem aus zwei Buchstaben bestehenden Ländercode. Geben Sie alle Informationen an.

  5. Geben Sie yes ein und drücken Sie als letzten Schritt Enter.

    Ausgang:

    HTTPS-Keystore

  6. Das bedeutet, dass die Datei testkey.jks im Ordner bin erstellt wurde. Kopieren Sie sie in Ihren Java-Projektordner, um sie in das Programm zu laden.

Sobald der Keystore und der Truststore generiert sind, können wir einen HTTPS-Server in JAVA erstellen.

Beispiel:

package delftstack;

import com.sun.net.httpserver.*;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpsExchange;
import com.sun.net.httpserver.HttpsServer;
import java.io.*;
import java.net.InetSocketAddress;
import java.security.KeyStore;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLParameters;
import javax.net.ssl.TrustManagerFactory;

public class HTTPS_Server {
  public static class MyHandler implements HttpHandler {
    @Override
    public void handle(HttpExchange x) throws IOException {
      String Response = "This is the response from delftstack";
      HttpsExchange HTTPS_Exchange = (HttpsExchange) x;
      x.getResponseHeaders().add("Access-Control-Allow-Origin", "*");
      x.sendResponseHeaders(200, Response.getBytes().length);
      OutputStream Output_Stream = x.getResponseBody();
      Output_Stream.write(Response.getBytes());
      Output_Stream.close();
    }
  }

  public static void main(String[] args) throws Exception {
    try {
      // setup the socket address
      InetSocketAddress Inet_Address = new InetSocketAddress(9000);

      // initialize the HTTPS server
      HttpsServer HTTPS_Server = HttpsServer.create(Inet_Address, 0);
      SSLContext SSL_Context = SSLContext.getInstance("TLS");

      // initialise the keystore
      char[] Password = "password".toCharArray();
      KeyStore Key_Store = KeyStore.getInstance("JKS");
      FileInputStream Input_Stream = new FileInputStream("testkey.jks");
      Key_Store.load(Input_Stream, Password);

      // setup the key manager factory
      KeyManagerFactory Key_Manager = KeyManagerFactory.getInstance("SunX509");
      Key_Manager.init(Key_Store, Password);

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

      // setup the HTTPS context and parameters
      SSL_Context.init(Key_Manager.getKeyManagers(), Trust_Manager.getTrustManagers(), null);
      HTTPS_Server.setHttpsConfigurator(new HttpsConfigurator(SSL_Context) {
        public void configure(HttpsParameters params) {
          try {
            // initialise the SSL context
            SSLContext SSL_Context = getSSLContext();
            SSLEngine SSL_Engine = SSL_Context.createSSLEngine();
            params.setNeedClientAuth(false);
            params.setCipherSuites(SSL_Engine.getEnabledCipherSuites());
            params.setProtocols(SSL_Engine.getEnabledProtocols());

            // Set the SSL parameters
            SSLParameters SSL_Parameters = SSL_Context.getSupportedSSLParameters();
            params.setSSLParameters(SSL_Parameters);
            System.out.println("The HTTPS server is connected");

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

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

Der obige Code erstellt einen lokalen Host-HTTPS-Server an Portnummer 9000, der für alles verwendet werden kann.

Ausgabe (in der IDE):

The HTTPS server is connected

Ausgabe (im Browser):

Antwort

Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Verwandter Artikel - Java HTTPS