gpt4 book ai didi

java - handshake.getPeerCertificates() 双向握手中的空指针

转载 作者:太空宇宙 更新时间:2023-11-03 13:45:45 26 4
gpt4 key购买 nike

握手完成后,我在握手时调用 getPeerCertificates() (socket.getHandshakeSession()) 我正在使用 setNeedClientAuth(true)在服务器套接字上,所以我知道它必须获得客户端证书。

可能出了什么问题? SSLPeerUnverifiedException 没有被抛出

ssf = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();  
serverSocket = (SSLServerSocket)ssf.createServerSocket(PORT);
serverSocket.setNeedClientAuth(true);
//added to after accept list and picked up by a worker thread.
SSLSocket socket = (SSLSocket) serverSocket.accept();

//worker thread.
SSLSession handshake = socket.getHandshakeSession();
Certificate[] certificates = handshake.getPeerCertificates(); // NULL

最佳答案

当你调用socket.getHandshakeSession()时,你还没有开始握手,当然你还没有到达交换客户端证书的地步。尽管调用 getSession() 是开始握手的一种方式(参见 SSLSocket 文档的介绍,但 getHandshakeSession() 不会发生这样的事情(因为 documentation说:“与 getSession() 不同,此方法不会启动初始握手,并且在握手完成之前不会阻塞。”)。

在大多数情况下,无论如何,您都希望在握手完成后获得客户端证书。调用 socket.getSession() 而不是 socket.getHandshakeSession()(Java 7 中的新增功能)可能会解决您的问题。

关于java - handshake.getPeerCertificates() 双向握手中的空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14485500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com