Maven+JDK6での、peer not authenticated
Maven(3.0.3)+JDK6において実行してたら、repository.apache.orgにアクセスした時に、以下のエラー発生した模様。
[WARNING] Could not transfer metadata commons-collections:commons-collections:4.0-SNAPSHOT/maven-metadata.xml from/to apache (https://repository.apache.org/content/groups/snapshots/): peer not authenticated [WARNING] Failure to transfer commons-collections:commons-collections:4.0-SNAPSHOT/maven-metadata.xml from https://repository.apache.org/content/groups/snapshots/ was cached in the local repository, resolution will not be reattempted until the update interval of apache has elapsed or updates are forced. Original error: Could not transfer metadata commons-collections:commons-collections:4.0-SNAPSHOT/maven-metadata.xml from/to apache (https://repository.apache.org/content/groups/snapshots/): peer not authenticated
peer not authenticated
と初めてのエラーだったけど、
証明書関連の問題かと早とちりして、ローカルのJDKに証明書のkeystoreに追加
$ openssl s_client -showcerts -connect repository.apache.org:443 </dev/null 2>/dev/null|openssl x509 -outform DER > repository-apache-org.cer $ ${JAVA_HOME}/bin/keytool -import -trustcacerts -file repository-apache-org.cer -keystore ${JAVA_HOME}/jre/lib/security/cacerts -alias repository-apache-org -storepass changeit
でも、Mavenが、まだ失敗するので、調査。(同じエラーメッセージでた)
とりあえず、内部でどんなエラーでるのか、以前作成したscriptでcheck。
$ export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home $ git clone https://github.com/hdkshjm/check-java-trusted-store.git $ bash ./check-java-trusted-store/bin/access_ssl_test.sh -u https://repository.apache.org -c ${JAVA_HOME}/jre/lib/security/cacerts JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home certs file=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security/cacerts Exception in thread "main" javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:190) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1747) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1708) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1691) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1222) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1199) at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:476) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234) at SSLClientSample.main(SSLClientSample.java:23) Caused by: java.lang.RuntimeException: Could not generate DH keypair at com.sun.net.ssl.internal.ssl.DHCrypt.<init>(DHCrypt.java:114) at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:559) at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:186) at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593) at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:943) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1188) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1215) ... 6 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(DashoA13*..) at java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:627) at com.sun.net.ssl.internal.ssl.DHCrypt.<init>(DHCrypt.java:107) ... 13 more fail to access https://repository.apache.org
Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive)
というエラーメッセージから
こことか
ここに関連するかと思い、
最終的には、JDK-6521495 : Lift 1024-bit long prime restriction on Diffie-Hellmanに当てはまるかと推測。
JDK7だと、これによって、7u85で修正されている。
でも、推測は外れた模様。
上記のfix前の7u4で試したところ、上記エラーメッセージは表示されなかった。。。。
(7u4では同じエラーメッセージが表示され、7u85では表示されないと想定してた)
そもそもEOLを迎えているJDK6を使うべきではないので、これ以上調査するのを止めてJDK7使うことで解決とした。
これ以上調べても、結局JDK7or8使うことが解決策になるだろうと思う。
時間があったら、もうちょっと調べてみよう。