【问题标题】:How to detect exceptions in delegated tasks (SSLEngine)如何检测委托任务中的异常(SSLEngine)
【发布时间】:2015-10-06 15:48:13
【问题描述】:

我将SSLEngines 与 NIO 一起使用,为我的应用程序提供非阻塞 SSL 连接。在握手期间的某个时刻(可能在收到ServerHelloDone 之后)SSLEngine 要求我处理委派的任务。

所以我调用getDelegatedTask 并称之为run 方法。任务本身调用X509ExtendedKeyManager.getCertificateChain,而后者又抛出NullPointerException。该异常被Handshaker 捕获并存储以供以后报告。

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

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

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

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

【问题讨论】:

  • 任务完成后,您应该重试返回 NEED_TASK 的操作。但是为什么会抛出 NullPointerException 呢?
  • 您实际上是对的。我的代码实际上确实调用了getHandshakeStatus 并得到了NEED_UNWRAP,但由于sourceByteBuffer 中没有任何内容,因此内部优化位我和unwrap 没有被调用。请重新发表您的评论作为答案。

标签: java exception jsse sslengine


【解决方案1】:

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

您需要在KeyManager. 中找到并修复 NPE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多