Java 我的应用程序如何知道要使用的私钥
我有一个在GlassFish 3.x上运行的应用程序。它通过https与远程服务器通信。在我的cacerts文件中,我添加了服务器证书。在我的keystore.jks中,我添加了运行远程服务器的公司发给我的私钥。这在GlassFish2.x上非常有效,但是在3.x上,远程服务器一直抱怨我的密钥无效 如果从密钥库中删除密钥,则会出现相同的错误。这就好像它甚至没有加载密钥,这让我想知道应用程序/容器如何知道我需要哪个密钥 我的连接代码如下所示:Java 我的应用程序如何知道要使用的私钥,java,ssl,glassfish,Java,Ssl,Glassfish,我有一个在GlassFish 3.x上运行的应用程序。它通过https与远程服务器通信。在我的cacerts文件中,我添加了服务器证书。在我的keystore.jks中,我添加了运行远程服务器的公司发给我的私钥。这在GlassFish2.x上非常有效,但是在3.x上,远程服务器一直抱怨我的密钥无效 如果从密钥库中删除密钥,则会出现相同的错误。这就好像它甚至没有加载密钥,这让我想知道应用程序/容器如何知道我需要哪个密钥 我的连接代码如下所示: public class SSLSocket { p
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;
}
}
我相应地设置了主机和端口,但我不想说去哪里在密钥库中查找这个别名。所以应用程序如何知道要获取哪个别名?解释双向ssl和所有jazz让人筋疲力尽。我将尝试找到一个有用的链接。但是,当部署在glassfish中的应用程序充当通过SSL(例如通过SSL端口配置的LDAP服务器域)与服务器通信的客户端时,它将使用glassfish服务器的身份证书(来自其密钥库)作为其客户端证书,供您参考 但是,如果您显式地为SSL握手编码,则客户端应用程序负责选择密钥库,并将证书作为握手的一部分呈现 因为它在Glassfish的早期版本中工作,所以相同的代码应该适用于您。您的问题很可能与配置有关。我对您添加到服务器的
keystore.jks
中的内容感到有点困惑,通常其他服务器的证书会添加到信任存储cacerts.jks
A
一个
有两种方法可以实现这一点 第一: 从管理控制台页面打开以下路径
- 配置
- 您的群集/实例配置
- jvm设置
- jvm选项
- 您将在项目列表中的某些位置找到这一行 -Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as
System.setProperty(“com.sun.enterprise.security.httpsOutboundKeyAlias”,“您的证书别名”) 只是为了澄清“在mykeystore.jks中,我添加了运行远程服务器的公司发给我的私钥”并没有发生。没有人会给你他们的私钥。你拥有的是他们的公钥。可能是。。。键工具-列表等。。。说它是私钥。如果它真的是来自其他地方的私钥,你应该立即呼叫安全部门。由于不止一方知道该私钥,因此该私钥毫无价值。它不能按预期唯一地标识您,并且生成的事务对您来说是不可否认的,因此它根本不能为远程服务器公司提供任何级别的安全性。您应该生成自己的私钥和证书,并获得由CA签名的证书。感谢您提供的示例。这些都没有显示应用程序如何查找别名。