HttpsServer处理程序没有被调用

时间:2015-07-08 15:14:57

标签: java ssl https keystore handshake

我正在使用以下HttpsServer来实现一个简单的安全服务器。首先,我创建了密钥库,并且生成了密钥对,并且我在密钥库中有自签名证书。我使用以下代码来设置代码。

server = HttpsServer.create(new InetSocketAddress( SERVER_PORT), conversationCount);
SSLContext sslContext = SSLContext.getInstance("TLS");
char[] password= "XXXXX".toCharArray();
KeyStore ks = KeyStore.getInstance("JKS");
FileInputStream fis = new FileInputStream("server_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( getConfigurator(sslContext));
server.createContext("/", new RootRequestHandler());
server.setExecutor(threadPool);
server.start();
threadPool= Executors.newFixedThreadPool(conversationCount);
threadPool.execute(new Runnable() {
    public void run() {
        System.out.println("Asynchronous task");
    }
});

My Configurator如下所示。

private HttpsConfigurator getConfigurator( SSLContext sslContext) {
    return new HttpsConfigurator(sslContext) {
        @Override
        public void configure (HttpsParameters params) {
            SSLEngine m_engine = sslContext.createSSLEngine();
            final SSLContext context = getSSLContext();
            final SSLParameters sslParams = context.getDefaultSSLParameters();
            params.setNeedClientAuth(false);
            params.setSSLParameters(sslParams);
            params.setCipherSuites(m_engine.getEnabledCipherSuites());
            params.setProtocols(m_engine.getEnabledProtocols());
        }
    };
}

当我打开https://localhost:8001/“此网页不可用时”浏览器上显示“ERR_CONNECTION_CLOSED”错误。

我还使用单元测试测试了代码,测试失败并出现以下错误。

javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

我知道当我从浏览器调用服务器时,我看到配置代码总是被调用但不是处理程序。即使调用服务器,一些如何不指向请求。我无法弄清楚我在这里做错了什么。希望有人可以帮助我。

1 个答案:

答案 0 :(得分:0)

在代码中经过一些试验和错误后,我发现代码没有任何问题,所以我改变了我一直使用的密钥类型。所以我意识到错误是由于密钥而导致EC密钥无法使用且RSA密钥可用。