gpt4 book ai didi

Java https 服务器

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:34 26 4
gpt4 key购买 nike

我正在使用 HttpServer 类在 Java 中构建一个应用程序服务器。我让这个服务器通过 HTTP 使用纯文本通信完美运行。但是,我希望使用 HttpsServer 类将其升级为使用 SSL。我使用这个问题作为工作的基础:Simple Java HTTPS server

我的服务器类如下:

public Server(Options options){

SSLContext sslContext = null;
try {
server = HttpsServer.create(new InetSocketAddress(8080), 0);
sslContext = SSLContext.getInstance("TLS");
char[] password = options.getSSLPassword().toCharArray();
KeyStore ks = KeyStore.getInstance ("JKS");
FileInputStream fis = new FileInputStream (options.getSSLKeystore());
ks.load ( fis, password );

KeyManagerFactory kmf = KeyManagerFactory.getInstance ( "SunX509" );
kmf.init ( ks, password );

TrustManagerFactory tmf = TrustManagerFactory.getInstance ( "SunX509" );
tmf.init ( ks );

sslContext.init ( kmf.getKeyManagers (), tmf.getTrustManagers (), null );

} catch (Exception e) {
e.printStackTrace();
}

HttpsConfigurator httpsConfigurator = new HttpsConfigurator(sslContext) {
@Override
public void configure(HttpsParameters httpsParameters) {
SSLContext sslContext = getSSLContext();
SSLParameters defaultSSLParameters = sslContext.getDefaultSSLParameters();
httpsParameters.setSSLParameters(defaultSSLParameters);
}
};

server.createContext("/", new HttpHandler() {
@Override
public void handle(HttpExchange t) throws IOException {
HttpsExchange s = (HttpsExchange)t;
s.getSSLSession();
String response = "<html><body>Hello world.</body></html>";
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
});
server.setExecutor(Executors.newCachedThreadPool());
System.out.println("Starting server on port " + port + "...");
server.setHttpsConfigurator(httpsConfigurator);
server.start();
System.out.println("Server started successfully!");
}

这可以编译并运行良好,但是当我尝试通过浏览器在 localhost:8080 上连接时,我得到“没有收到数据”并且在 https://localhost:8080 上我收到“网页不可用”没有抛出任何异常,它似乎运行没有任何问题,除了它什么都不做。

我使用 keytool 程序生成 keystore ,但我不熟悉这个过程,所以这可能是不正确的?但同样,它在设置 keystore 和 keyManagers 等时接受它。

我是否需要更改我的 HttpHandler 或上下文来处理 SSL 交换或其他事情?

最佳答案

我已经能够使用我在问题中提供的代码让程序使用 SSL。我相信我遇到的问题是因为我生成的 keystore 。使用此命令生成有效的 keystore :

keytool -genkey -alias alias -keyalg RSA -keystore keystore.jks -keysize 2048

关于Java https 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29323825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com