2014-09-12 52 views
0

由于我的AWS计算机上昨天进行了Linux更新,我无法再连接到HTTPS站点。运行我的Groovy(Java)的脚本时,我收到以下错误:AWS:无法使用openjdk-1.7.0_65生成DH密钥对

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:1884) 
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1842) 
    at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1825) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1346) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323) 
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153) 
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:439) 
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:424) 
    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:178) 
    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:167) 
    at org.jsoup.Connection$get$1.call(Unknown Source) 
    at SiteConnector.run(SiteConnector.groovy:59) 
    at groovy.lang.GroovyShell.runScriptOrMainOrTestOrRunnable(GroovyShell.java:258) 
    at groovy.lang.GroovyShell.run(GroovyShell.java:502) 
    at groovy.lang.GroovyShell.run(GroovyShell.java:491) 
    at groovy.ui.GroovyMain.processOnce(GroovyMain.java:650) 
    at groovy.ui.GroovyMain.run(GroovyMain.java:381) 
    at groovy.ui.GroovyMain.process(GroovyMain.java:367) 
    at groovy.ui.GroovyMain.processArgs(GroovyMain.java:126) 
    at groovy.ui.GroovyMain.main(GroovyMain.java:106) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:106) 
    at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:128) 
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:621) 
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:205) 
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868) 
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:804) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016) 
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312) 
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339) 
    ... 24 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:658) 
    at sun.security.ssl.DHCrypt.<init>(DHCrypt.java:127) 
    ... 31 more 

我认为亚马逊Linux有一个新的依赖于Java版本(1.7.0_65)这个错误 - 我怎样才能得到它周围(https://stackoverflow.com/a/16687105/438001在Java版本中提到问题)?什么是没有这个问题的Java版本,以及如何在AWS上安装它(解决依赖问题的正确的存储库是什么 - Amazon Linux仅向我显示了要使用yum进行安装的最新Java版本)。

如果Java版本是不是我可以得到下面的线再次合作的问题(顺便说一句,这是在堆栈跟踪提到的第59行):

Jsoup.connect(httpsURL).userAgent(USER_AGENT).timeout(TIMEOUT).get() 

提前许多感谢, 约尔格

+0

为什么你确定这是一个Java错误,而不仅仅是一个众所周知的限制? – 2014-09-12 23:02:24

+0

你有没有安装无限加密文件?注意[Java 8支持2048位DH](​​http://tt4cs.wordpress.com/2014/04/20/dh-2048-now-supported-by-jdk8/),可能是因为你的机器是试图生成服务器给出的不支持的密钥长度。 – 2014-09-12 23:31:18

回答

1

最后,我的解决方案是基于这些instructions安装Java 8(jdk-8u20-linux-x64.tar.gz) - 就像@owlstead提到的那样,至少Java 8可以支持加密。我不确定是否由于AWS Linux机器的更新而出现问题,或者我尝试联系的网站是否更新了其加密方法(与Java 7的加密技术不兼容)。

0

如果您的情况与我的情况类似,出于某种原因,您无法将java升级到java 8,那么对我而言,java 7就是升级,然后升级NSS。我正在运行centos 6.5,它有相同的java版本,1.7.0_65。

它更新为java verion 1.7.0_85,并升级nss,我运行“sudo yum upgrade nss”,然后一切正常。

在此blog有解决方案。我希望这将有助于未来的人。