Java https服务器

我正在使用HttpServer类在Java中构建应用程序服务器.我使用HTTP上的纯文本通信来使该服务器正常运行.但是,我希望使用HttpsServer类将其升级为使用SSL.
我以以下问题为基础从以下工作开始:Simple Java HTTPS server

我的服务器类如下:

public Server(Options options){

    SSLContext sslContext = null;
    try {
        server = HttpsServer.create(new InetSocketAddress(8080), 0);
        sslContext = SSLContext.getInstance("TLS");
        char[] password = options.getSSLPassword().toCharArray();
        KeyStore ks = KeyStore.getInstance ("JKS");
        FileInputStream fis = new FileInputStream (options.getSSLKeystore());
        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 );

    } catch (Exception e) {
        e.printStackTrace();
    } 

    HttpsConfigurator httpsConfigurator = new HttpsConfigurator(sslContext) {
        @Override
        public void configure(HttpsParameters httpsParameters) {
            SSLContext sslContext = getSSLContext();
            SSLParameters defaultSSLParameters = sslContext.getDefaultSSLParameters();
            httpsParameters.setSSLParameters(defaultSSLParameters);
        }
    };

   server.createContext("/", new HttpHandler() {
        @Override
        public void handle(HttpExchange t) throws IOException {
            HttpsExchange s = (HttpsExchange)t;
            s.getSSLSession();
            String response = "<html><body>Hello world.</body></html>";
            t.sendResponseHeaders(200, response.length());
            OutputStream os = t.getResponseBody();
            os.write(response.getBytes());
            os.close();
        }
    });
    server.setExecutor(Executors.newCachedThreadPool());
    System.out.println("Starting server on port " + port + "...");
    server.setHttpsConfigurator(httpsConfigurator);
    server.start();
    System.out.println("Server started successfully!");
}

这可以编译并运行良好,但是当我尝试通过本地主机上的浏览器连接到8080时,我收到“没有数据”,在https://localhost:8080上我收到“网页不可用”
除了它什么都不做的事实外,没有任何异常被抛出,它似乎没有问题.

我使用keytool程序生成密钥库,但是我不熟悉此过程,所以也许这是不正确的?但是,它再次接受此设置,因为它正在设置密钥库和keyManagers等.

我是否需要更改HttpHandler或上下文来处理SSL交换之类的东西?

解决方法:

我已经能够使用问题中提供的代码使该程序与SSL一起使用.我相信我遇到的问题是由于生成的密钥库.使用此命令生成有效的密钥库:

keytool -genkey -alias alias -keyalg RSA -keystore keystore.jks -keysize 2048
上一篇:清除“应用程序设置上的数据”是否会清除为该特定应用程序存储的所有Android KeyStore?


下一篇:eclipse将android项目生成apk并且给apk签名