2014-09-12 129 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有解決方案。我希望這將有助於未來的人。