以下是该方案:
我的问题是:
有谁知道问题是什么? 我真的很感激任何建议:)
客户端Tomcat的代码:
SetupClientKeystore();
SetupServerKeystore();
SSLContext context = SetupSSLContext();
SSLSocketFactory socketFactory = sslContext.getSocketFactory();
SSLSocket socket = (SSLSocket) socketFactory.createSocket(hostname, portNo);
GZIPOutputStream gZipOut = new GZIPOutputStream(socket.getOutputStream()); // no trust certificate found throws here
服务器A和B的代码:
setupClientKeyStore();
setupServerKeystore();
setupSSLContext();
server = new ServerSocket(portNo);
SSLServerSocketFactory socketFactory = sslContext.getServerSocketFactory();
serverSocket = (SSLServerSocket) socketFactory.createServerSocket(portNo);
serverSocket.setNeedClientAuth(true);
while ( true )
{
Socket client = serverSocket.accept();
inStream = client.getInputStream();
BufferedInputStream bufferedIn = new BufferedInputStream(inStream); //unknown_certificate throws here
//do something here.....
}
答案 0 :(得分:0)
“javax.net.ssl.SSLHandshakeException:收到致命警报: certificate_unknown“
这通常表示服务器的证书不受信任
可能是当您以userA身份登录时加载serverA的可信证书并连接,然后当您尝试连接到serverB时,尝试使用ServerA证书验证serverB(以userA身份登录时加载)?
因此,SSL握手失败
因此,当您重新启动并以userB身份登录时,会加载相应的证书(即ServerB),并且连接成功了吗?
您的帖子中没有代码,但如果您按照我的说法执行此操作,则说明异常。