Java 如何检测委派任务(SSLEngine)中的异常
我将Java 如何检测委派任务(SSLEngine)中的异常,java,exception,jsse,sslengine,Java,Exception,Jsse,Sslengine,我将SSLEngines与NIO一起使用,为我的应用程序提供非阻塞SSL连接。在握手过程中的某个时刻(可能是在收到ServerHelloDone之后),SSLEngine要求我处理委托的任务 所以我调用getDelegatedTask并调用它的run方法。任务本身调用X509ExtendedKeyManager.getCertificateChain,然后抛出NullPointerException。该异常由握手器捕获并存储以供以后报告 但是,报告是通过调用privatechecktasksho
SSLEngine
s与NIO一起使用,为我的应用程序提供非阻塞SSL连接。在握手过程中的某个时刻(可能是在收到ServerHelloDone
之后),SSLEngine
要求我处理委托的任务
所以我调用getDelegatedTask
并调用它的run
方法。任务本身调用X509ExtendedKeyManager.getCertificateChain
,然后抛出NullPointerException
。该异常由握手器捕获并存储以供以后报告
但是,报告是通过调用privatechecktaskshorn
方法工作的,该方法仅在收到消息或要发送消息时调用。
但是如果没有正确完成getCertificateChain
,则没有要发送的内容,而另一方也没有发送任何内容,因此没有要接收的内容。因此,异常保持隐藏状态
由于没有任何一方进行,我们有一个活锁。
我找不到任何方法来阻止或检测,除了
- 使用反射调用
checktaskshorn
- 使用一些任务/计时器超时
这两个都不是我想要走的路线…当任务完成时,您应该重试返回NEED\u task的操作。
您需要在KeyManager中查找并修复NPE。
任务完成后,您应该重试返回need\u任务的操作。但是为什么它会抛出一个NullPointerException呢?实际上你是对的。我的代码确实调用了getHandshakeStatus
并得到了NEED\u UNWRAP
,但由于sourceByteBuffer
中没有任何内容,因此内部优化对我进行了位置,并且没有调用UNWRAP
。请回复您的评论作为答复。