javax.net.ssl.SSLHandshakeException:null cert chain

时间:2017-02-21 10:26:10

标签: java ssl

有谁可以告诉我错误的原因是什么?我试图建立到服务器的SSL连接。但连接总是失败。在从服务器人员请求日志后,我可以在他们的错误日志上看到javax.net.ssl.SSLHandshakeException:null cert chain。我一直在努力研究这个错误是什么以及可能导致什么,但无济于事。如果有人能够详细解释这个错误是什么以及可能导致错误的原因,我将不胜感激。

这里是我用来连接服务器的客户端代码

import java.io.*;
import java.net.*;
import java.security.*;


import java.util.Enumeration;
import javax.net.ssl.*;

public class SSLConnect {

public String MakeSSlCall(String meternum) {
String message = "";
FileWriter file = null;
try {
    file = new FileWriter("C:\\SSLCERT\\ClientJavalog.txt");

} catch (Exception ee) {
    message = ee.getMessage();

}
//writer = new BufferedWriter(file );
try {
    file.write("KeyStore Generated\r\n");
    KeyStore keystore = KeyStore.getInstance("JKS");
    keystore.load(new FileInputStream("C:\\SSLCERT\\newclientkeystore"), "client".toCharArray());
    file.write("KeyStore Generated\r\n");
    Enumeration enumeration = keystore.aliases();
    while (enumeration.hasMoreElements()) {
        String alias = (String) enumeration.nextElement();
        file.write("alias name: " + alias + "\r\n");
        keystore.getCertificate(alias);
        file.write(keystore.getCertificate(alias).toString() + "\r\n");
    }
    TrustManagerFactory tmf =TrustManagerFactory.getInstance("SunX509");
    tmf.init(keystore);
    file.write("KeyStore Stored\r\n");
    SSLContext context = SSLContext.getInstance("SSL");
    TrustManager[] trustManagers = tmf.getTrustManagers();
    context.init(null, trustManagers, null);

    SSLSocketFactory f = context.getSocketFactory();
    file.write("About to Connect to Ontech\r\n");
    SSLSocket c = (SSLSocket) f.createSocket("192.168.1.16", 4447);
    file.write("Connection Established to 196.14.30.33 Port: 8462\r\n");
    file.write("About to Start Handshake\r\n");
    c.startHandshake();

    file.write("Handshake Established\r\n");
    file.flush();
    file.close();
    return "Connection Established";
}
 catch (Exception e) {
    try {
        file.write("An Error Occured\r\n");
        file.write(e.getMessage() + "\r\n");
        file.flush();
        file.close();
    } catch (Exception eee) {
        message = eee.getMessage();
    }
    return "Connection Failed";
}
}
}

我的Keytool命令用于生成Truststore并导入服务器证书和我自己的证书

用于创建信任库的Keytool命令

keytool -import -alias client -file client.cer -keystore MyKeystore -storepass mystore

keytool -import -alias server -file server.cer -keystore MyKeystore -storepass mystore

0 个答案:

没有答案