运行我的SSL聊天程序时遇到问题。我在Ubuntu中使用Eclipse。我尝试运行此代码
import java.net.*;
import java.io.*;
import javax.net.ssl.*;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.Principal;
import java.security.cert.*;
public class SSLSocketClient {
private static String host;
public static void main(String[] args) {
String cipher = null;
String portNo;
int port = 0;
boolean mykeystore = false;
boolean chat = false;
if (args.length == 5) {
for (int i = 0; i < args.length; i++) {
if (args[i].equals("-host")) {
host = args[++i];
continue;
}
if (args[i].equals("-port")) {
portNo = args[++i];
port = Integer.parseInt(portNo);
continue;
}
if (args[i].equals("-cipher")) {
cipher = args[++i];
continue;
}
if (args[i].equals("-chat")) {
chat = true;
continue;
}
if (args[i].equals("-mykeystore")) {
mykeystore = true;
continue;
}
}
}
else {
System.out.println("Please check again parameter!");
}
if (mykeystore) {
System.setProperty("javax.net.ssl.trustStore", "mykeystore");
System.setProperty("javax.net.ssl.trustStorePassword", "kosuke");
}
SSLContext sc;
try {
sc = SSLContext.getInstance("TLSv1.2");
sc.init(null, null, null);
SSLSocketFactory factory = (SSLSocketFactory) sc.getSocketFactory();
SSLSocket mysslsocket = (SSLSocket) factory.createSocket(host, port);
if (cipher != null) {
String[] cipherarray = { cipher };
mysslsocket.setEnabledCipherSuites(cipherarray);
}
SSLSession session= mysslsocket.getSession();
X509Certificate cert;
// cert = (X509Certificate) session.getPeerCertificates()[0];
// System.out.println(session.getPeerHost() + "has presented a certificate belonging to: ");
//Principal p=cert.getSubjectDN();
//if(chat) {
//BufferedReader in = new BufferedReader( new InputStreamReader(System.in));
//BufferedWriter out = new BufferedWriter( new OutputStreamWriter( mysslsocket.getOutputStream()));
//while(true) {
//String s= in.readLine();
//if (!s.equals("")) {
//out.write(s);
//out.write(" \r\n ");
//out.flush();
//if (s.equals(".")) break;
// }
//}
// }
mysslsocket.startHandshake();
mysslsocket.close();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (KeyManagementException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
当我尝试在终端
中运行参数时java SSLSocketClient -host localhost -port 11111 -mykeystore
我得到了回应:
java.security.NoSuchAlgorithmException: TLSv1.2 SSLContext not available
at sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
at javax.net.ssl.SSLContext.getInstance(SSLContext.java:142)
at SSLSocketClient.main(SSLSocketClient.java:61)
我不知道我的代码中有什么问题。我已经将密钥库复制到程序源代码但仍然无法正常工作。请帮帮我
由于
答案 0 :(得分:4)
TLSv1.2
未添加到默认JCE提供程序。请参阅Java 6和Java 7标准算法名称引用。
如果您坚持使用Java 6或更早版本并且绝对需要TLS 1.2,请尝试使用Bouncy Castle提供程序。