1

我使用SSLEngines 和 NIO 来为我的应用程序提供非阻塞 SSL 连接。在握手期间的某个时刻(可能在收到之后ServerHelloDoneSSLEngine需要我处理委派的任务。

所以我打电话getDelegatedTask给它的run方法。任务本身调用X509ExtendedKeyManager.getCertificateChain,而后者又抛出一个NullPointerException. 该异常被 捕获Handshaker并存储以供以后报告。

然而,报告通过调用checkTaskThrown仅在收到消息或要发送消息时调用的私有方法来工作。但是如果没有getCertificateChain正确完成,就没有东西可以发送,对方也没有发送任何东西,所以没有东西可以接收。因此异常保持隐藏。

由于没有一方继续进行,我们有一个活锁。我发现没有办法阻止或检测到这一点,除了

  • 使用反射调用checkTaskThrown
  • 使用一些任务/计时器超时

哪一条都不是我想走的路……

4

1 回答 1

2

任务完成后,您应该重试返回的操作NEED_TASK.

你需要找到并修复你的 NPEKeyManager.

于 2016-02-11T06:07:19.540 回答