使用 Java 创建 HTTPS 服务器
安全超文本传输协议 (HTTPS) 是一种安全协议,可确保通过互联网进行安全通信。 HTTPS 使用一对私钥和数字证书来验证接收方和发送方。
本文将介绍用 Java 创建一个简单的 HTTPS 服务器。
使用 Java 创建 HTTPS 服务器
在用JAVA创建HTTPS服务器之前,我们必须确保已经生成了服务器将使用的Keystore和Truststore。 要生成它们,请按照以下步骤操作:
- 以管理员身份打开命令提示符。
- 在cmd中进入Java bin目录的路径。
-
现在运行以下命令:
keytool -genkeypair -keyalg RSA -alias selfsigned -keystore testkey.jks -storepass password -validity 360 -keysize 2048
- 此命令将询问您的姓氏、组织单位、组织、城市、州和两个字母的国家/地区代码。 提供所有信息。
-
输入 yes 并按 Enter 作为最后一步。
输出:
- 这意味着bin文件夹中已经生成了testkey.jks文件,将其复制到您的Java项目文件夹中以将其加载到程序中。
一旦生成了Keystore和Truststore,我们就可以在JAVA中创建一个HTTPS服务器了。
例子:
package jiyik;
import java.io.*;
import java.net.InetSocketAddress;
import com.sun.net.httpserver.HttpsServer;
import java.security.KeyStore;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.TrustManagerFactory;
import com.sun.net.httpserver.*;
import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLParameters;
import javax.net.ssl.SSLContext;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpsExchange;
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 jiyik";
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();
}
}
}
上面的代码在端口号 9000 处创建了一个本地主机 HTTPS 服务器,该服务器可以用于任何用途。
输出(在 IDE 中):
The HTTPS server is connected
相关文章
Java 中的 AES 256
发布时间:2023/08/10 浏览次数:83 分类:Java
-
AES 256 是一种加密和解密算法。 本教程演示如何在 Java 中实现 AES 256 来加密和解密数据。Java 中的 AES 256 AES 是一种对称加密算法,易于在软件、硬件和受限环境中实现。
在JDBC中建立连接池
发布时间:2023/08/10 浏览次数:55 分类:Java
-
JDBC 是 Sun Microsystems 的一项规范,它为 Java 应用程序提供 API 以执行不同的操作,例如对各种数据库进行读取和写入。 JDBC提供了一种数据库连接标准的语言,您可以编写数据库访问所需的程序。
在 Java 中使用 SwingUtilities.invokeLater()
发布时间:2023/08/10 浏览次数:101 分类:Java
-
SwingUtilities.invokeLater() 方法在 Abstract Window Toolkit (AWT) 事件调度线程上执行可运行对象。 我们这样做是因为 Swing 数据结构不是线程安全的。线程安全意味着它可以从多个线程并行使用而不会导致
Java 尾部调用优化
发布时间:2023/08/10 浏览次数:170 分类:Java
-
本文讨论尾部调用优化(也称为 TCO)及其在 Java 中不存在的原因。 我们还将看到一些其他可以用来在 Java 中模拟 TCO 的方法。什么是尾调用优化
修复警告:使用或覆盖 Java 中已弃用的 API
发布时间:2023/08/10 浏览次数:75 分类:Java
-
本文我们将了解为什么警告说使用或覆盖已弃用的 API,并演示如何修复此问题以完成任务。修复警告说使用或覆盖 Java 中已弃用的 API
使用 Java 删除文件夹
发布时间:2023/08/09 浏览次数:76 分类:Java
-
在本文中,我们将学习如何使用 Java 编程语言删除文件夹/目录。 有多种方法可以做到这一点。 让我们一一看看。使用Java的File类的delete()删除空文件夹
Java 中的多个动作监听器
发布时间:2023/08/09 浏览次数:178 分类:Java
-
本文我们将介绍如何在 Java 中创建多个动作监听器。在Java中,ActionListener是一个用于处理动作事件的类。 因此,Java 提供了这个接口,使用它我们可以找到用户单击按钮的位置,并生成一些事件