1

SSLEngines を NIO と一緒に使用して、アプリケーションにノンブロッキング SSL 接続を提供します。ハンドシェイク中のある時点で (おそらく を受け取った後ServerHelloDone)、SSLEngine委任されたタスクを処理する必要があります。

だから私はgetDelegatedTaskそれのrunメソッドを呼び出して呼び出します。タスク自体が を呼び出しX509ExtendedKeyManager.getCertificateChain、次にNullPointerException. その例外は によってキャッチされHandshaker、後でレポートするために保存されます。

checkTaskThrownただし、レポートは、メッセージが受信されたとき、またはメッセージが送信されるときにのみ呼び出されるプライベート メソッドを呼び出すことによって機能します。しかしgetCertificateChain、正しく完了しなければ、送信するものは何もなく、相手も何も送信しないため、受信するものはありません。したがって、例外は非表示のままです。

どちらの側も進まないので、ライブロックがあります。そして、それを防止または検出する方法を見つけられませんでした。

  • リフレクションを使用して呼び出すcheckTaskThrown
  • タイムアウトのためにいくつかのタスク/タイマーを使用する

どちらも私の行きたい道ではない…

4

1 に答える 1

2

タスクが完了したら、返された操作を再試行する必要がありますNEED_TASK.

で NPE を見つけて修正する必要があります。KeyManager.

于 2016-02-11T06:07:19.540 に答える