package com.what21.httpserver.https;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.security.KeyStore;
import java.util.concurrent.Executors;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLParameters;
import com.sun.net.httpserver.HttpsConfigurator;
import com.sun.net.httpserver.HttpsParameters;
import com.sun.net.httpserver.HttpsServer;
public class MyHttpServer {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws Exception {
//建立证书库
KeyStore ks = KeyStore.getInstance("JKS");
//载入证书
ks.load(new FileInputStream("证书名文件" ), "密码".toCharArray());
//建立一个密钥管理工厂
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
//初始化工厂
kmf.init(ks, "密码".toCharArray());
//建立证书实体
SSLContext sslContext = SSLContext.getInstance("SSLv3");
//初始化证书
sslContext.init(kmf.getKeyManagers(), null, null);
//在https server载入配置
HttpsServer server = HttpsServer.create(new InetSocketAddress(8000), 0);
server.setHttpsConfigurator (new HttpsConfigurator(sslContext) {
public void configure (HttpsParameters params) {
// 获取远程地址
InetSocketAddress remote = params.getClientAddress();
System.out.println(remote);
// SSLContext
SSLContext c = getSSLContext();
// 取到默认参数
SSLParameters sslparams = c.getDefaultSSLParameters();
// 这里进行验证
params.setSSLParameters(sslparams);
}
});
// creates a default executor
server.setExecutor(Executors.newCachedThreadPool());
server.createContext("/", new MyHandler());
server.start();
}
}
package com.what21.httpserver.https;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
public class MyHandler implements HttpHandler {
public void handle(HttpExchange xchg) throws IOException {
Headers headers = xchg.getRequestHeaders();
Set>> entries = headers.entrySet();
StringBuffer response = new StringBuffer();
for (Map.Entry> entry : entries){
response.append(entry.toString() + "\n");
}
// 返回
xchg.sendResponseHeaders(200, response.length());
OutputStream os = xchg.getResponseBody();
os.write(response.toString().getBytes());
os.close();
}
}