這裏有多個分開的服務器通信是情景:Tomcat作爲客戶端通過SSL
- 我現在已經在本地運行多個應用服務器(應該在不同的主機上運行) - >各自不同的端口上偵聽(在本地主機)。
- 我有一個運行在Tomcat上的客戶端應用程序。
- 啓動Tomcat時,請以不同用戶的詳細信息登錄並遠程連接到不同的(上述)服務器。
我的問題是:
- 首先,我啓動Tomcat和登錄的用戶A,那麼它成功地連接到serverA的(本地主機:1000)。
- 然後我退出了。
- 按照用戶B重新登錄,它沒有按預期連接到serverB(localhost:1001);相反,它給出了異常 「javax.net.ssl.SSLHandshakeException:收到致命警報:certificate_unknown」
- 但是,如果我重新啓動Tomcat,並以userB先登錄,它將成功連接到serverB。
有誰知道這個問題是什麼? 我真的很感激任何建議:)
代碼客戶端的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
代碼ServerA和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.....
}
你是什麼意思的'連接',你做類似的Web服務調用從Tomcat到ServerA和ServerB? – home
感謝您的及時答覆,通過「連接」我的意思是「打開與serverA的sslsocket連接並通過它發送/接收的東西」 – Jacey
你能告訴我們調用外部服務器的代碼嗎? – home