【发布时间】:2016-04-05 12:41:35
【问题描述】:
我已经用com.sun.net.httpserver.HttpsServer 库设置了我自己的https 服务器。
代码如下所示:
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 放在前面?
-
@Marged 好吧,我可以使用其中一个网络服务器,但我想知道是否可以通过这种方式实现。
标签: java redirect ssl https httpserver