We created a new viewing experience for our SMS API documentation. It's now all in one central location. Click here to check it out!

When attempting to access api.transmitsms.com via Java you are receiving errors similar to:

java.lang.RuntimeException: Could not generate DH keypair


javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair
 at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
 at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1904)
 at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1862)
 at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1845)
 at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1366)
 at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1343)
 at SSLTest.main(SSLTest.java:21)
Caused by: java.lang.RuntimeException: Could not generate DH keypair
 at sun.security.ssl.DHCrypt.<init>(DHCrypt.java:136)
 at sun.security.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:688)
 at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:261)
 at sun.security.ssl.Handshaker.processLoop(Handshaker.java:913)
 at sun.security.ssl.Handshaker.process_record(Handshaker.java:849)
 at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1023)
 at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332)
 at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359)
 ... 2 more
Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive)
 at com.sun.crypto.provider.DHKeyPairGenerator.initialize(DHKeyPairGenerator.java:120)
 at java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:675)
 at sun.security.ssl.DHCrypt.<init>(DHCrypt.java:127)
 ... 9 more


This is caused by a bug in the Java SSL implementation that causes the DH algorithm to fail when the server is configured to use more than 1024 as its DH prime value.


http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6521495


The consensus on how to fix suggests moving to Java 8.


It is also possible to alter the SSL handling code to ignore DH as a secure method.


The attached file provides sample code based on an answer at.


This article, "Java: Why does SSL handshake give 'Could not generate DH keypair' exception?" may help you implement this in your own solution.