Trying to perform a TLS handshake between a client and a server. However, it does not follow the change encryption specification step. Also on the client side, I get an exception, as described below: I can’t understand why I am getting a strange exception, as shown below.
What does it mean? Any ideas on how to fix this?
I am running it under Java 7.
java.security.NoSuchAlgorithmException: PBES2 Algorithm Parameters are not available on sun.security.jca.GetInstance.getInstance (GetInstance.java:159) in java.security.Security.getImpl (Security.java:695) in java.security.AlgorithmParameters (AlgorithmParameters.java:146) at com.certicom.security.pkcs.pkcs5.g. (Unknown source) at com.certicom.security.pkcs.pkcs5.ia (Unknown source) at com.certicom.security.sslplus.ba (Unknown source) at com.certicom.security.cert.internal.x509.PKCS8.decrypt (Unknown source) in com.certicom.security.cert.internal.x509.SSLPlusSupport.getLocalIdentity (Unknown Source) in com.certicom.tls.cert.CertLoader.loadLocalIdentity (Unknown Source) in com.certicom.tls.interfaceimpl (Unknown source) at com.certicom.tls.TLSContext.loadLocalIdentity (Unknown source) at com.onstar.emxp.util.TLSClient.loadCert (TLSClient.java:66) at com.onstar.adc.pd.connection.TLSContextLoader.getTLSContext (TLSContextLoader.java:27) at com.onstar.adc.pd.PacketClient.run (PacketClient.java:74)
java.security.InvalidKeyException: PBES2 com.certicom.security.pkcs.pkcs5.g. ( Source) com.certicom.security.pkcs.pkcs5.i.a( ) com.certicom.security.sslplus.b.a( ) com.certicom.security.cert.internal.x509.PKCS8.decrypt( ) com.certicom.security.cert.internal.x509.SSLPlusSupport.getLocalIdentity( ) com.certicom.tls.cert.CertLoader.loadLocalIdentity( ) com.certicom.tls.interfaceimpl.i.a( ) com.certicom.tls.TLSContext.loadLocalIdentity( ) com.onstar.emxp.util.TLSClient.loadCert(TLSClient.java:66) com.onstar.adc.pd.connection.TLSContextLoader.getTLSContext(TLSContextLoader.java:27) at com.onstar.adc.pd.PacketClient.run(PacketClient.java:74)
java.security.KeyManagementException com.certicom.security.cert.internal.x509.SSLPlusSupport.getLocalIdentity( ) com.certicom.tls.cert.CertLoader.loadLocalIdentity( ) com.certicom.tls.interfaceimpl.i.a( ) com.certicom.tls.TLSContext.loadLocalIdentity( ) com.onstar.emxp.util.TLSClient.loadCert(TLSClient.java:66) com.onstar.adc.pd.connection.TLSContextLoader.getTLSContext(TLSContextLoader.java:27) at com.onstar.adc.pd.PacketClient.run(PacketClient.java:74) : java.security.KeyManagementException
, tls:
socket = new Socket(host, port);
InputSSLIOStream inputStream = new InputSSLIOStream(
socket.getInputStream());
OutputSSLIOStream outputStream = new OutputSSLIOStream(
socket.getOutputStream());
TLSConnection tlsConnection = tlsContextLoader.getTLSContext()
.getClientConnection(inputStream, outputStream, "server");
tlsConnection.startHandshake();
socket.setSoTimeout(30000);
OutputStream tlsOutputStream = tlsConnection.getOutputStream();
InputStream tlsInputStream = tlsConnection.getInputStream();
TLS:
public class TLSContextLoader
{
public TLSContext getTLSContext()
throws Exception
{
TLSContext localTLSContext = new TLSContext();
localTLSContext.setIsStrongCipherSuiteLimited(false);
localTLSContext.setHelloProtocol("TLS1-ONLY");
localTLSContext.setEllipticCurves(new String[] { "secp256r1" });
localTLSContext.setClientAuthModes(new String[] { "ECDSA_SIGN" });
localTLSContext.setDebugFlag();
localTLSContext.setEccDraftCompatibility(-1);
localTLSContext.setX509BasicConstraintBug(true);
TLSClient.loadCert(localTLSContext, "packetserver");
localTLSContext.setPSKParam(new byte[] { 49 });
localTLSContext.loadTrustedCertificates(KeyLoader.getTrustedStream("rootca"));
localTLSContext.setRNG(new SecureRandom(generateSeed()));
LocalTrustManager localLocalTrustManager = new LocalTrustManager();
localTLSContext.setTrustManager(localLocalTrustManager);
localTLSContext.setEnabledCipherSuites(EMXPArrays.csvToArray("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"));
localTLSContext.setNeedClientAuth(false);
return localTLSContext;
}
private byte[] generateSeed() {
String str = new String();
str = str + "IDH" + System.identityHashCode(str);
Runtime localRuntime = Runtime.getRuntime();
str = str + "FM" + localRuntime.freeMemory();
str = str + "CT" + System.currentTimeMillis();
Properties localProperties = System.getProperties();
Enumeration localEnumeration = localProperties.elements();
while (localEnumeration.hasMoreElements()) {
str = str + localEnumeration.nextElement();
}
str = str + "VHC" + str.hashCode();
return str.getBytes();
}
}