使用 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 中延迟几秒钟的时间
发布时间:2023/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,