我正在使用以下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
我知道当我从浏览器调用服务器时,我看到配置代码总是被调用但不是处理程序。即使调用服务器,一些如何不指向请求。我无法弄清楚我在这里做错了什么。希望有人可以帮助我。
答案 0 :(得分:0)
在代码中经过一些试验和错误后,我发现代码没有任何问题,所以我改变了我一直使用的密钥类型。所以我意识到错误是由于密钥而导致EC密钥无法使用且RSA密钥可用。