4

Java 7u9

タイトルのエラーメッセージは次のとおりです:「致命的なエラー:80:ネットレコードのラップ解除の問題」。だから、タイトルに「問題」を入れさせてくれませんでした。

Nettyに対してJavaHTTPSクライアントを構築しています。サーバーのホスト名検証を有効にするために「HTTPS」エンドポイント識別アルゴリズムを追加するまで、SSLハンドシェイクは機能していました。

SSLEngine engine = tcpHelper.getSSLContext().createSSLEngine();
SSLParameters sslParameters = engine.getSSLParameters();
sslParameters.setEndpointIdentificationAlgorithm("HTTPS");
engine.setSSLParameters(sslParameters);
engine.setUseClientMode(true);

アルゴリズムを追加した後、SSLハンドシェイクがハングし、接続が最終的にタイムアウトします。SSLデバッグを有効にすると(javax.net.debug = all)、サーバーが証明書チェーンを送信した後、ServerHelloの後、ハンドシェイクが失敗することがわかります。

*** ServerHelloDone
1761586552@qtp-1653588482-2, WRITE: TLSv1.2 Handshake, length = 3294

サーバー上。クライアントは証明書チェーンを受信して​​表示し、次の場合に失敗します。

New I/O  worker #3, fatal error: 80: problem unwrapping net record
java.lang.RuntimeException: Delegated task threw Exception/Error
%% Invalidated:  [Session-1, TLS_DHE_DSS_WITH_AES_128_CBC_SHA256]
New I/O  worker #3, SEND TLSv1.2 ALERT:  fatal, description = internal_error
New I/O  worker #3, WRITE: TLSv1.2 Alert, length = 2
4

1 に答える 1

8

Java 7u9

最初に、私を最終的な答えに導いたこの関連する質問についての彼の助けに対してブルーノに感謝します。

私自身の質問に答えます。苦労して得た知識。

解決策は、SSLエンジンを作成するときに、リクエストターゲットのホストとポートをコンストラクターに追加することです。

SSLEngine engine = tcpHelper.getSSLContext().createSSLEngine(targetHost, targetPort);

これがないと、Javaは最終的にSSLライブラリ(IPAddressUtil.textToNumericFormatV4)の奥深くにNullPointerExceptionをスローし、SSLデバッグ出力にあまり役に立たないエラーメッセージが表示されます。

于 2012-11-15T03:04:25.150 に答える