我已经用com.sun.net.httpserver.HttpsServer
库设置了我自己的https服务器。如何使用Java HTTPS服务器管理HTTP请求?
的代码看起来是这样的:
int PORT = 12345;
File KEYSTORE = new File("path/to/my.keystore");
String PASS = "mykeystorepass";
HttpsServer server = HttpsServer.create(new InetSocketAddress(PORT), 0);
SSLContext sslContext = SSLContext.getInstance("TLS");
char[] password = PASS.toCharArray();
KeyStore ks = KeyStore.getInstance("JKS");
FileInputStream fis = new FileInputStream(KEYSTORE);
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);
server.setHttpsConfigurator(new HttpsConfigurator(sslContext) {
public void configure(HttpsParameters params) {
try {
SSLContext c = SSLContext.getDefault();
SSLEngine engine = c.createSSLEngine();
params.setNeedClientAuth(false);
params.setCipherSuites(engine.getEnabledCipherSuites());
params.setProtocols(engine.getEnabledProtocols());
SSLParameters defaultSSLParameters = c.getDefaultSSLParameters();
params.setSSLParameters(defaultSSLParameters);
} catch(Exception ex) {
ex.printStackTrace();
}
}
});
server.createContext("/", new Handler());
server.setExecutor(null);
server.start();
一切工作,但现在我试图管理来此HTTPS服务器在同一端口上的HTTP请求。当我用HTTP协议打开网页(由我的HttpHandler处理)时,它说错误ERR_EMPTY_RESPONSE
,只有HTTPS协议起作用。
我想将所有传入连接从HTTP自动重定向到HTTPS。或者对于两种协议使用不同的HttpHandler会很好。
我该如何做到这一点?
你有没有具体的理由这样做,而不是像Tomcat提供的嵌入式Web服务器或将Apache放在Front中? – Marged
@Marged我可以使用这些网络服务器之一,但我想知道是否有可能通过这种方式实现。 – PerwinCZ