Java:javax.net.ssl.SSLHandshakeException

时间:2016-12-21 07:44:20

标签: java ssl ssl-certificate

给出以下代码:

    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 ,但无法找出符合我需求的特定命令。 你能帮忙吗? 感谢

1 个答案:

答案 0 :(得分:0)

你需要

keytool -genkey ...

生成密钥对,然后

keytool -selfcert ...

使用相同的别名生成自签名证书。