给出以下代码:
public void start(String a_sAddress, int a_nPort) throws IOException {
try {
// Create a trust manager that does not validate certificate chains
final TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {
// TODO Auto-generated method stub
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {
// TODO Auto-generated method stub
}
} };
// Install the all-trusting trust manager
final SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init( null, trustAllCerts, new java.security.SecureRandom() );
// Init a configuration with our SSL context
HttpsConfigurator configurator = new HttpsConfigurator(sslContext);
HttpsServer server = HttpsServer.create(new InetSocketAddress(a_sAddress, a_nPort), 0);
server.setHttpsConfigurator(configurator);
//here - attaching HttpHanlder code.
server.setExecutor(null); // creates a default executor
server.start();
}
catch (KeyManagementException e) {
System.out.println("HttpsRequest - setTLSMode - KeyManagementException");
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
System.out.println("HttpsRequest - setTLSMode - NoSuchAlgorithmException");
e.printStackTrace();
}
}
我试图忽略证书验证,因为我只是一个测试模拟器。
问题是我的客户端获得" javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接"
我必须在这里办理证书吗?或者我没有试图忽略证书验证?
谢谢。
更新:嗯,和一些朋友交谈,他们建议我应该创建一个自签名证书,用它注册我的服务器并发送给我的客户端,以便在向我发送请求时使用。
我的服务器在Solaris 10上运行。我试图查看 The Most Common Java Keytool Keystore Commands ,但无法找出符合我需求的特定命令。 你能帮忙吗? 感谢
答案 0 :(得分:0)
你需要
keytool -genkey ...
生成密钥对,然后
keytool -selfcert ...
使用相同的别名生成自签名证书。