extremely ugly hack to fix bad behaviour of java6 when dealing with SSL

This commit is contained in:
Federico Fissore 2013-06-06 18:03:53 +02:00
parent 137da0326d
commit f791329ddc
2 changed files with 11 additions and 2 deletions

View File

@ -16,6 +16,7 @@ import processing.app.debug.RunnerException;
import processing.app.debug.TargetPlatform;
import processing.app.helpers.PreferencesMap;
import javax.net.ssl.SSLSocket;
import java.io.*;
import java.net.InetSocketAddress;
import java.net.Socket;
@ -90,6 +91,10 @@ public class HttpUploader extends Uploader {
try {
socket = new Socket();
socket.connect(new InetSocketAddress(ipAddress, 9876), 5000);
socket = new EasySSLProtocolSocketFactory().createSocket(socket, ipAddress, 9876, true);
SSLSocket sslSocket = (SSLSocket) socket;
sslSocket.setEnabledProtocols(EasySSLProtocolSocketFactory.SSL_PROTOCOLS);
sslSocket.setEnabledCipherSuites(EasySSLProtocolSocketFactory.SSL_CYPHER_SUITES);
OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream());
osw.write(uploadRequest.toString());
osw.flush();

View File

@ -97,6 +97,8 @@ public class EasySSLProtocolSocketFactory implements SecureProtocolSocketFactory
* Log object for this class.
*/
private static final Log LOG = LogFactory.getLog(EasySSLProtocolSocketFactory.class);
public static final String[] SSL_PROTOCOLS = {"SSLv3", "TLSv1"};
public static final String[] SSL_CYPHER_SUITES = {"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", "TLS_RSA_WITH_AES_128_CBC_SHA", "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA", "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA", "TLS_DHE_RSA_WITH_AES_128_CBC_SHA", "TLS_DHE_DSS_WITH_AES_128_CBC_SHA", "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", "TLS_ECDHE_RSA_WITH_RC4_128_SHA", "SSL_RSA_WITH_RC4_128_SHA", "TLS_ECDH_ECDSA_WITH_RC4_128_SHA", "TLS_ECDH_RSA_WITH_RC4_128_SHA", "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA", "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", "SSL_RSA_WITH_3DES_EDE_CBC_SHA", "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA", "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA", "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA", "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA", "SSL_RSA_WITH_RC4_128_MD5", "TLS_EMPTY_RENEGOTIATION_INFO_SCSV"};
private SSLContext sslcontext = null;
@ -188,9 +190,11 @@ public class EasySSLProtocolSocketFactory implements SecureProtocolSocketFactory
socket.bind(localaddr);
socket.connect(remoteaddr, timeout);
}
SSLSocket sslSocket = (SSLSocket) socket;
String[] protocolsWithoutSSLv2Hello = {"SSLv3", "TLSv1"};
sslSocket.setEnabledProtocols(protocolsWithoutSSLv2Hello);
sslSocket.setEnabledProtocols(SSL_PROTOCOLS);
sslSocket.setEnabledCipherSuites(SSL_CYPHER_SUITES);
return socket;
}