ホームページ > Java > &#&チュートリアル > Java SSL 接続での「DH キーペアを生成できませんでした」例外を修正する方法は?

Java SSL 接続での「DH キーペアを生成できませんでした」例外を修正する方法は?

Patricia Arquette
リリース: 2024-12-06 10:00:27
オリジナル
638 人が閲覧しました

How to Fix the

「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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート