我有一个在Java 6上运行的遗留应用程序。但是,由于某些安全因素,我们需要升级到TLS 1.2。 为此,我尝试了以下代码:
@Transactional
}
但我收到以下错误:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLParameters;
public class TlsCheck {
/**
* test whether this client can connect to TLS v1.2 or not
*/
public static boolean isSuccessfulTLS12connection(){
try{
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, null, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
URL url = new URL("https://tlstest.paypal.com");
HttpsURLConnection httpsConnection = (HttpsURLConnection)url.openConnection();
httpsConnection.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(httpsConnection.getInputStream()));
StringBuilder body = new StringBuilder();
while(reader.ready()){
body.append(reader.readLine());
}
httpsConnection.disconnect();
System.out.println("The body is::"+body.toString());
if(body.toString().equals("PayPal_Connection_OK")){
return true;
}
}catch(NoSuchAlgorithmException ne){
ne.printStackTrace();
}catch(UnknownHostException ue){
ue.printStackTrace();
}catch(IOException ioe){
ioe.printStackTrace();
}catch(KeyManagementException ke){
ke.printStackTrace();
}
return false;
}
public static void main(String args[]){
try{
SSLParameters sslParams = SSLContext.getDefault().getSupportedSSLParameters();
System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");
sslParams.setProtocols(new String[] { "TLSv1.2"});
String[] protocols = sslParams.getProtocols();
System.out.println("The Supported Protocols are::"+Arrays.asList(protocols));
}catch(NoSuchAlgorithmException ne){
ne.printStackTrace();
}
if(isSuccessfulTLS12connection()){
System.out.println("The connection to TLS v1.2 endpoint is succesful");
}else{
System.out.println("The connection to TLS v1.2 failed!");
}
}
有人能建议更好的方式而不是设置财产吗?我也试过设置JVM参数,但没有运气!
答案 0 :(得分:3)
真正的解决方案?升级到Java 1.7或更高版本。继续运行Java 1.6 Update 45并将其连接到互联网是专业的鲁莽。
如何鲁莽?非常
因为Oracle在四年前发布了a critical patch update for Java 1.6 Update 45 fixed over 40 security vulnerabilities 。
在那些固定的四年前:
SIX 更多,漏洞评级为10.0 - 这意味着它是一个易于可利用的远程漏洞。
这只是四年前Oracle在Java 1.6 Update 45中实际修复的严重安全漏洞的列表。在那个仍然存在的补丁中还有更多的东西没有被修复。
你没有修复任何。
重申:这些漏洞 - and a whole lot more - 仍然存在于Java 1.6 Update 45中。
再次:继续使用Java 1.6 Update 45并将其连接到互联网鲁莽。 Java 1.6 Update 45具有至少25(!!!)已知可远程利用的安全漏洞,CVE分数为9.3或更高。
答案 1 :(得分:2)
最新的Java 6 SE公共版本是6u45,不支持TLS 1.2。要将TLS 1.2与Java 6一起使用,我发现了两种可能性:
答案 2 :(得分:0)
正如Marcel已经提到的,Java 6没有TLS支持。也许您可以使用像curl这样的外部软件作为解决方法来使用System.exec()发出请求?