Crear un servidor HTTPS en Java
El Protocolo seguro de transferencia de hipertexto (HTTPS) es un protocolo seguro que garantiza una comunicación segura a través de Internet. El HTTPS utiliza un par de claves privadas y un certificado digital para verificar el receptor y el remitente.
Este tutorial demostrará la creación de un servidor HTTPS simple en Java.
Crear un servidor HTTPS en Java
Antes de crear un servidor HTTPS en JAVA, debemos asegurarnos de haber generado Keystore y Truststore, que utilizará el servidor. Para generarlos, siga los siguientes pasos:
-
Abra el símbolo del sistema como administrador.
-
Vaya a la ruta del directorio bin de Java en cmd.
-
Ahora ejecuta el siguiente comando:
keytool -genkeypair -keyalg RSA -alias selfsigned -keystore testkey.jks -storepass password -validity 360 -keysize 2048
-
Este comando le preguntará su apellido, unidad organizativa, organización, ciudad, estado y código de país de dos letras. Proporcione toda la información.
-
Escriba
sí
y presioneEnter
como último paso.Producción:
-
Esto significa que el archivo
testkey.jks
se ha generado en la carpeta bin, cópielo en la carpeta de su proyecto Java para cargarlo en el programa.
Una vez que se generan Keystore y Truststore, podemos crear un servidor HTTPS en JAVA.
Ejemplo:
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();
}
}
}
El código anterior crea un servidor HTTPS de host local en el número de puerto 9000, que se puede usar para cualquier cosa.
Salida (en el IDE):
The HTTPS server is connected
Salida (en el navegador):
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