gpt4 book ai didi

java - 如何使 SSL 服务器套接字在 java 中同时支持 http 和 https?

转载 作者:搜寻专家 更新时间:2023-11-01 02:42:30 25 4
gpt4 key购买 nike

我正在尝试使用应该同时支持 http 和 https 的 java 套接字创建简单的 web 服务器。但我一次只能实现一个。我需要同时支持 http @ port 80 和 https @ port 443 的逻辑。
这是使用 sslsocket 的 HTTPS 服务器的示例代码。我们可以使用简单的 ServerSocket 实现 HTTP 服务器。

public class HttpsServer {
public static void main(String[] args) {
try {
KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(new FileInputStream("/opt/p12file.p12"), "p12pass".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, "p12pass".toCharArray());

SSLContext sc = SSLContext.getInstance("TLS");
sc.init(kmf.getKeyManagers(), null, null);

SSLServerSocketFactory ssf = sc.getServerSocketFactory();
SSLServerSocket s = (SSLServerSocket) ssf.createServerSocket(8080);

while (true) {
SSLSocket c = (SSLSocket) s.accept();
BufferedWriter w = new BufferedWriter(new OutputStreamWriter(c.getOutputStream()));
w.write("HTTP/1.0 200 OK");
w.newLine();
w.write("Content-Type: text/html");
w.newLine();
w.newLine();
w.write("<html><body><h1>Https Server Works</h1></body></html>");
w.newLine();
w.flush();
w.close();
c.close();
}
}
catch (Exception e) {
e.printStackTrace();
}
}

谁能帮帮我??

最佳答案

How make SSL server socket support both http & https in java?

你不能。 HTTP是明文,SSLServerSocket不支持。

I'm trying to create simple web server using java sockets which should support both http & https. But I can achieve only one at a time. I need to logic which supports both http @ port 80 & https @ port 443 at same time.

你需要:

  • 纯文本 ServerSocket 监听 80
  • SSLServerSocket 监听在 443
  • 为其中的每一个都有一个接受循环线程
  • 每个接受的套接字一个连接线程。

您永远不会在静态 main() 方法中完成它。我建议您阅读 Java 教程的“自定义网络”部分,然后阅读 JSSE 引用指南。

当然,您还需要仔细阅读 RFC 2616 HTTP 1.1。正确实现非常重要。

正如评论中所建议的,您真的应该使用现成的东西。

关于java - 如何使 SSL 服务器套接字在 java 中同时支持 http 和 https?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30498206/

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