「DH キーペアを生成できませんでした」例外
特定の IRC サーバー (特に、aperture.esper.net: 6697)、Java で「java.lang.RuntimeException: 生成できませんでした」が発生する場合があります。 DH キーペア」例外が発生し、後続の「java.security.InvalidAlgorithmParameterException: プライム サイズは 64 の倍数である必要があり、範囲は 512 ~ 1024 (両端を含む) のみです。
原因:
この例外は、Java が DH に対して受け入れるデフォルトの最大素数サイズに起因します。キーペア、つまり 1024 ビット。ただし、SSL 接続を開始しているサーバー (この場合は、aperture.esper.net) は、より大きな素数サイズの DH キーペアをネゴシエートしようとしている可能性があります。
回避策:
1. BouncyCastle の JCE 実装を使用する:
JDK-6521495 バグ レポートで提案されているように、BouncyCastle JCE 実装を利用してデフォルトの Java 実装を置き換えることができます。この代替実装は、より大きな DH キーペア サイズをサポートします。
2. Java バージョンのアップグレード:
この問題は、最近の Java バージョンで解決されています。素数の最大サイズ制限は、JDK 7044060 では 2048 ビットに引き上げられ、JDK 8072452 では完全に削除されました (2048 ビットを超えるサイズを許可)。Java 9 以降にアップグレードすると、問題が解決されます。
例 (使用するBouncyCastle):
Security.addProvider(new BouncyCastleProvider()); SSLContext sslContext = SSLContext.getInstance("SSL", "BC"); sslContext.init(null, trustAllCerts, new SecureRandom()); s = (SSLSocket)sslContext.getSocketFactory().createSocket(); s.connect(new InetSocketAddress(host, port), timeout); s.setSoTimeout(0); ((SSLSocket)s).startHandshake();
追加メモ:
問題のサーバー、aperture.esper.net は、標準の観点からは設定が間違っているようです。上記の回避策により、Java アプリケーションが正常に接続して SSL セッションを確立できるようになります。
以上がJava SSL 接続での「DH キーペアを生成できませんでした」例外を修正する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。