Sockets Tomcat作为客户端通过SSL与多个分离的服务器通信
以下是场景:Sockets Tomcat作为客户端通过SSL与多个分离的服务器通信,sockets,tomcat,Sockets,Tomcat,以下是场景: 我现在有多个应用服务器在本地运行(应该在不同的主机上运行)-->每个应用服务器都在不同的端口(在本地主机上)上侦听 我有一个在Tomcat上运行的客户端应用程序 启动Tomcat时,使用不同的用户详细信息登录,远程连接到不同的(以上)服务器 我的问题是: 首先,我启动Tomcat并以userA身份登录,然后它成功地连接到serverA(localhost:1000) 然后我注销了 再次以userB登录,未按预期连接到serverB(localhost:1001);相反,它给出
- 我现在有多个应用服务器在本地运行(应该在不同的主机上运行)-->每个应用服务器都在不同的端口(在本地主机上)上侦听
- 我有一个在Tomcat上运行的客户端应用程序
- 启动Tomcat时,使用不同的用户详细信息登录,远程连接到不同的(以上)服务器
- 首先,我启动Tomcat并以userA身份登录,然后它成功地连接到serverA(localhost:1000)
- 然后我注销了
- 再次以userB登录,未按预期连接到serverB(localhost:1001);相反,它给出了例外 “javax.net.ssl.SSLHandshakeException:收到致命警报:证书\u未知”
- 但是,如果我重新启动Tomcat,并首先以userB身份登录,它就会成功地连接到serverB
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.....
}
“javax.net.ssl.SSLHandshakeException:收到致命警报:
证书“未知”
这通常表示服务器的证书不受信任。是否当您以userA身份登录时,您加载了serverA的受信任证书并进行连接,然后当您尝试连接到serverB时,您尝试使用serverA的证书对serverB进行身份验证(当您以userA身份登录时加载)?
因此,SSL握手失败。
因此,当您重新启动并以userB身份登录时,会加载相应的证书(即ServerB的证书),并且连接成功?
你的帖子中没有代码,但如果你按照我说的做,这就解释了例外情况 你所说的“连接”是什么意思?你会从Tomcat向ServerA和ServerB调用web服务吗?谢谢你的及时回复,我所说的“连接”是指“打开到ServerA的sslsocket连接并通过它发送/接收内容”。你能给我们看一下调用外部服务器的代码吗?我以前曾想过,但仍然无法调试它。我几分钟前才发现那只虫子。谢谢你的帮助:)这就是问题所在?你没有重新加载信任库?