用Java创建HTTPS服务器

时间:2015-04-13 07:03:19

标签: java ssl https

我一直在尝试在我的应用程序中创建一个简单的HTTPS服务器。我能够运行服务器,同时完成'SSL上下文创建'而没有错误(我已经包含了System.out.println(“SSL上下文创建... \ n”);)。

但是,我无法通过浏览器甚至java编写的客户端连接到它。当我尝试连接到这个应用程序时,java编写的客户端返回NoHttpResponseException。

“线程中的异常”主“org.apache.http.NoHttpResponseException:localhost:8000无法响应”

那么,是否有可能在下面的代码中指出我缺少的内容?感谢

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;

import com.sun.net.httpserver.HttpsConfigurator;
import com.sun.net.httpserver.HttpsParameters;
import com.sun.net.httpserver.HttpsServer;
import java.io.FileInputStream;

import java.security.KeyStore;

import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLParameters;
import javax.net.ssl.TrustManagerFactory;



public class HTTPSserver {

public static void main(String[] args) throws Exception {

    char[] password = "SSLauthentication".toCharArray();
    KeyStore ks = KeyStore.getInstance("JKS");
    FileInputStream fileInput = new FileInputStream("C:\\Files\\Certificates\\clientkeystore");

    ks.load(fileInput, password);

    KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
    kmf.init(ks, password);

    TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
    tmf.init(ks);

    SSLContext ssl = SSLContext.getInstance("TLS");
    ssl.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);



    HttpsServer server = HttpsServer.create(new InetSocketAddress(8000), 0);

    server.setHttpsConfigurator (new HttpsConfigurator(ssl)
        {
            @Override
            public void configure (HttpsParameters params)
            {
        try
                {

                    SSLContext c = getSSLContext();
                    SSLParameters sslparams = c.getDefaultSSLParameters();
                    params.setSSLParameters(sslparams);
                    System.out.println("SSL context created ...\n");
                }
                catch(Exception e2)
                {
                    System.out.println("Invalid parameter ...\n");
                    e2.printStackTrace();
                }
            }
        });



    server.createContext("/test", new MyHandler());
    server.setExecutor(null); 
    server.start();


       }

static class MyHandler implements HttpHandler {

    @Override
    public void handle(HttpExchange HTTPmessage) throws IOException {



        if("GET".equals(HTTPmessage.getRequestMethod()))
        {
        String response = "This is aaa response";
        HTTPmessage.sendResponseHeaders(200, response.length());

        OutputStream os = HTTPmessage.getResponseBody();
        os.write(response.getBytes());
        os.close();
        }

    }



}
}

0 个答案:

没有答案