我有一個在GlassFish 3.x上運行的應用程序。它通過https與遠程服務器通信。在我的cacerts文件中,我添加了服務器證書。在我的keystore.jks中,我添加了運行遠程服務器的公司發給我的私鑰。這對Glassfish 2.x非常有用,但是在3.x中,他們遠程服務器不斷抱怨我擁有的密鑰無效。我的應用程序如何知道使用什麼私鑰
如果我從密鑰庫中刪除密鑰,則會得到相同的錯誤。這是因爲如果它甚至沒有加載密鑰,這已經讓我不知道如何應用程序/容器知道我需要哪些關鍵
我的連接代碼如下所示:
public class SSLSocket {
private static Logger logger = LoggerFactory.getLogger(SSLSocket.class);
private ConnectionProperties connectionProperties;
public TuSSLSocket(ConnectionProperties connectionProperties) {
this.connectionProperties = connectionProperties;
}
public SSLSocket getSSLSocket() throws Exception{
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket) factory.createSocket(connectionProperties.getHost(), connectionProperties.getPort());
socket.setSoTimeout(90000);
return socket;
}
}
我設置的主機和端口相應地,但沒有我說的地方去在密鑰庫中尋找這個別名。所以...應用程序如何知道別名是什麼?
只是爲了澄清「在我的keystore.jks中,我添加了運行遠程服務器的公司發給我的私鑰」並未發生。沒有人會給你他們的私鑰。你有什麼是他們的公鑰。 – 2012-04-11 01:23:08
可能是...... keytool -list等......說這是一個私鑰。 – Preston 2012-04-11 02:50:14
如果確實是來自別處的私鑰,則應立即調用安全性。由於不止一方知道私鑰,所以私鑰是毫無價值的。它不能用來唯一標識您的意圖,並且所得到的事務在您的部分是不可批准的,所以它不會爲遠程服務器公司提供任何級別的安全性。您應該生成您自己的私鑰和證書,並獲取由CA簽名的證書。 – EJP 2012-04-11 06:16:34