Java アプリケーションをテストしています。DH 暗号スイートを使用して SSL ハンドシェイクを開始しようとしています。しかし、私は次のエラーが発生しています:
java.lang.RuntimeException: Could not generate DH keypair
を提案BouncyCastle
した人もいますが、多くの人がエラーを報告しているため、別の選択肢がある場合は使用しないでください。
http://www.oracle.com/technetwork/java/javase/downloads/index.htmlJava Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files
からのダウンロードが提案されています。次の 2 つのファイルと. 私がインストールしたことにも気づいたことに注意してください:そして、両方を置き換えました。しかし、それでも同じエラーが表示されます。java.security
java.policy
C:\Program Files (x86)\Java\jre7\lib\security
Java\jre7\security
Program Files (x86)
Program Files
このエラーの回避策はありますか?
編集: スタック トレース:
javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair
at sun.security.ssl.Alerts.getSSLException(Unknown Source)
at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
at sun.security.ssl.SSLSocketImpl.handleException(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at MyClass.MyClass.myFunction(MyProg.java:78)
at MyClass.MyClass.main(MyClass.java:233)
Caused by: java.lang.RuntimeException: Could not generate DH keypair
at sun.security.ssl.DHCrypt.<init>(Unknown Source)
at sun.security.ssl.ClientHandshaker.serverKeyExchange(Unknown Source)
at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
at sun.security.ssl.Handshaker.processLoop(Unknown Source)
at sun.security.ssl.Handshaker.process_record(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
... 4 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(Unknown Source)
... 11 more
EDIT2: 私のコードは、リモート サーバー (Web サイト) との SSL ハンドシェイクを開始しようとするクライアントとして機能しています。クライアントの暗号スイート リストを次のように設定します。
{
"TLS_ECDHE_RSA_WITH_RC4_128_SHA",
"TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
"TLS_ECDHE_RSA_WITH_NULL_SHA",
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",
"TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
"SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA",
"SSL_DHE_RSA_WITH_DES_CBC_SHA",
"SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA"
};
クライアントのリストにあるすべての暗号スイートは、Java でサポートされています。サーバーが長い DH キーを提供する場合に SSL ハンドシェークの開始をサポートするように Java クライアントを構成するにはどうすればよいですか?