Ran*_*ith 5 java sockets sslsocketfactory
我正在尝试使用 java 套接字创建简单的 Web 服务器,它应该支持 http 和 https。但我一次只能实现一个。我需要同时支持 http @ port 80 和 https @ port 443 的逻辑。
这是使用 sslsocket 的 HTTPS 服务器的示例代码。我们可以使用简单的ServerSocket来实现HTTP Server。
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();
}
}
Run Code Online (Sandbox Code Playgroud)
}
有人可以帮我吗?
java中如何让SSL服务器socket同时支持http和https?
你不能。HTTP是明文的,SSLServerSocket
无法支持。
我正在尝试使用 java 套接字创建简单的 Web 服务器,它应该支持 http 和 https。但我一次只能实现一个。我需要同时支持 http @ port 80 和 https @ port 443 的逻辑。
你需要:
ServerSocket
收听SSLServerSocket
443 的聆听你永远不会在静态方法中完成它main()
。我建议您阅读 Java 教程的“自定义网络”部分,然后阅读 JSSE 参考指南。
当然,您还需要仔细研究 RFC 2616 HTTP 1.1。正确实施是非常重要的。
正如评论中所建议的,您确实应该使用现成的东西。
归档时间: |
|
查看次数: |
5616 次 |
最近记录: |