TLSv1.2 SSL聊天Java,SSLContext不可用
我在运行SSL聊天程序时遇到问题。我在Ubuntu中使用Eclipse。我尝试运行此代码TLSv1.2 SSL聊天Java,SSLContext不可用,java,eclipse,security,ssl,Java,Eclipse,Security,Ssl,我在运行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.secur
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.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)
我不知道我的代码出了什么问题。我已将密钥库复制到程序源代码中,但仍然无法工作。请帮帮我
谢谢
TLSv1.2
直到Java 7才添加到默认的JCE提供程序中。请参阅和标准算法名称参考
如果您一直使用Java 6或更早版本,并且绝对需要TLS 1.2,请尝试该提供程序。
TLSv1.2
直到Java 7才添加到默认JCE提供程序中。请参阅和标准算法名称参考
如果您仍然坚持使用Java 6或更早版本,并且绝对需要TLS 1.2,请尝试提供程序。您使用的是哪个版本的JRE?我不知道,我对在Eclipse中使用Java是新手,尤其是在Ubuntu中。这里的问题是JRE吗?好的,我已经用JavaSE1.7创建了这个项目,但仍然不起作用。我的代码中有什么错误吗?在Java7中是否也有同样的错误?您使用的是OpenJDK还是Oracle JDK?您使用的是哪个版本的JRE?我不知道,我对在Eclipse中使用Java是新手,尤其是在Ubuntu中。这里的问题是JRE吗?好的,我已经用JavaSE1.7创建了这个项目,但仍然不起作用。我的代码中有什么错误吗?在Java7中是否也有同样的错误?您使用的是OpenJDK还是Oracle JDK?因此,如果我将java更新为java 7,就不会有问题了?如何将其更新为Java7?我是Java编程新手,尤其是Ubuntu和EclipseTry
sudo apt get install openjdk-7-jdk
。您也可以尝试TLSv1.1
。所以如果我将Java更新为Java 7就没有问题了?如何将其更新为Java7?我是Java编程新手,尤其是Ubuntu和EclipseTrysudo apt get install openjdk-7-jdk
。你也可以试试TLSv1.1
。
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)