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:
-
Öffnen Sie die Eingabeaufforderung als Administrator.
-
Wechseln Sie in cmd zum Pfad des Java-bin-Verzeichnisses.
-
Führen Sie nun den folgenden Befehl aus:
keytool -genkeypair -keyalg RSA -alias selfsigned -keystore testkey.jks -storepass password -validity 360 -keysize 2048
-
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.
-
Geben Sie
yes
ein und drücken Sie als letzten SchrittEnter
.Ausgang:
-
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):
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