迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

使用 Java 创建 HTTPS 服务器

作者:迹忆客 最近更新:2023/08/10 浏览次数:

安全超文本传输协议 (HTTPS) 是一种安全协议,可确保通过互联网进行安全通信。 HTTPS 使用一对私钥和数字证书来验证接收方和发送方。

本文将介绍用 Java 创建一个简单的 HTTPS 服务器。


使用 Java 创建 HTTPS 服务器

在用JAVA创建HTTPS服务器之前,我们必须确保已经生成了服务器将使用的Keystore和Truststore。 要生成它们,请按照以下步骤操作:

  1. 以管理员身份打开命令提示符。
  2. 在cmd中进入Java bin目录的路径。
  3. 现在运行以下命令:
    keytool -genkeypair -keyalg RSA -alias selfsigned -keystore testkey.jks -storepass password -validity 360 -keysize 2048
    
  4. 此命令将询问您的姓氏、组织单位、组织、城市、州和两个字母的国家/地区代码。 提供所有信息。
  5. 输入 yes 并按 Enter 作为最后一步。

    输出:

    HTTPS 密钥库
  6. 这意味着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

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

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 绘画组件

发布时间:2023/08/10 浏览次数:105 分类:Java

首先,我们将回顾一下 Java PaintComponent() 方法的工作原理。 它什么时候调用,它的子系统和类的结构是什么?最后,我们将向您展示如何使用此方法在屏幕上绘制图形。 继续阅读以了解更多信

在 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远程调试

发布时间:2023/08/10 浏览次数:123 分类:Java

我们必须执行具有特定参数的 Java 应用程序,以允许远程调试器附加。 我们将探索如何设置运行/调试配置来完成我们的工作。先决条件 要遵循本教程,我们必须启动并运行以下内容。

使用 Java 删除文件夹

发布时间:2023/08/09 浏览次数:76 分类:Java

在本文中,我们将学习如何使用 Java 编程语言删除文件夹/目录。 有多种方法可以做到这一点。 让我们一一看看。使用Java的File类的delete()删除空文件夹

Java 中的多个动作监听器

发布时间:2023/08/09 浏览次数:178 分类:Java

本文我们将介绍如何在 Java 中创建多个动作监听器。在Java中,ActionListener是一个用于处理动作事件的类。 因此,Java 提供了这个接口,使用它我们可以找到用户单击按钮的位置,并生成一些事件

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便