Java ベースの Usenet クライアントで Netty をバックエンドとして使用しています。ライブラリは正常に動作していますが、状況によっては、まさに次のエラーが原因で、SSL 経由でリモート サーバーに接続できません。
Java: SSL ハンドシェイクで「DH キーペアを生成できませんでした」という例外が発生するのはなぜですか?
残念ながら、何らかの理由でこの Java エラーはまだ修正されていないようです。また、リモート サーバーは私の管理下にないため、ここで回避策が必要です。上記のリンクによると、そのような「解決策」の 1 つは、SSL ハンドシェイク中に DH をまったく回避することです (あまりきれいではありませんが、何もしないよりはましかもしれません)。
ただし、私は SSL の専門家ではないため、Netty 内でそれを実装する方法がよくわかりません。またはそれ以上:Nettyに基づく私のソリューション内。今では、次のように接続を作成しています。
// configure the Netty client
ClientBootstrap bootstrap = new ClientBootstrap(clSockChannelFactory);
// configure the pipeline factory
bootstrap.setPipelineFactory(channelPipelineFactory);
bootstrap.setOption("tcpNoDelay", true);
bootstrap.setOption("keepAlive", true);
bootstrap.setOption("child.receiveBufferSizePredictorFactory",
new AdaptiveReceiveBufferSizePredictorFactory());
// start the connection attempt
InetSocketAddress isa = new InetSocketAddress(serverAddress, port);
ChannelFuture future = bootstrap.connect(isa);
...
channel = future.getChannel();
...
それは問題ありませんが、上記のスレッドで説明されているように、SSL ソケットに接続する前にどこで暗号スイートを無効にできますか?
ご協力いただきありがとうございます。
よろしく、 マティアス
PS: ところで、この問題が Java でまだ解決されていない理由を教えてください。