我将SSLEngine
s与NIO一起使用,为我的应用程序提供非阻塞SSL连接。在握手期间的某个时刻(可能是在收到ServerHelloDone
之后(,SSLEngine
要求我处理委派的任务。
所以我打电话给getDelegatedTask
,称之为run
方法。任务本身调用X509ExtendedKeyManager.getCertificateChain
,这反过来抛出一个NullPointerException
。该异常由Handshaker
捕获并存储以供以后报告。
但是,报告通过调用专用checkTaskThrown
方法起作用,该方法仅在收到消息或要发送消息时调用。但是没有正确完成getCertificateChain
,就没有什么可以发送的,另一方也没有发送任何东西,所以没有什么可以接收的。因此,异常保持隐藏状态。
由于没有一方继续前进,我们有一个活锁。我发现没有办法预防或检测它,除了
- 使用反射调用
checkTaskThrown
- 使用一些任务/计时器超时
这两者都不是我想走的路线...
任务完成后,应重试返回NEED_TASK.
您需要查找并修复KeyManager.
中的 NPE