我已經用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