我有一个在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