SSLEngine
s を NIO と一緒に使用して、アプリケーションにノンブロッキング SSL 接続を提供します。ハンドシェイク中のある時点で (おそらく を受け取った後ServerHelloDone
)、SSLEngine
委任されたタスクを処理する必要があります。
だから私はgetDelegatedTask
それのrun
メソッドを呼び出して呼び出します。タスク自体が を呼び出しX509ExtendedKeyManager.getCertificateChain
、次にNullPointerException
. その例外は によってキャッチされHandshaker
、後でレポートするために保存されます。
checkTaskThrown
ただし、レポートは、メッセージが受信されたとき、またはメッセージが送信されるときにのみ呼び出されるプライベート メソッドを呼び出すことによって機能します。しかしgetCertificateChain
、正しく完了しなければ、送信するものは何もなく、相手も何も送信しないため、受信するものはありません。したがって、例外は非表示のままです。
どちらの側も進まないので、ライブロックがあります。そして、それを防止または検出する方法を見つけられませんでした。
- リフレクションを使用して呼び出す
checkTaskThrown
- タイムアウトのためにいくつかのタスク/タイマーを使用する
どちらも私の行きたい道ではない…