Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JBoss/Java与SSL_Java_Ssl_Jboss_Pkcs#12 - Fatal编程技术网

JBoss/Java与SSL

JBoss/Java与SSL,java,ssl,jboss,pkcs#12,Java,Ssl,Jboss,Pkcs#12,嗨,我有点迷路了,希望你能带我离开这里。我将尽可能清楚,因为我并不真正理解/知道如何使用证书 我有一个应用程序,它应该使用webservices和SSL与另一个应用程序通信。我们都要求我们的主要证书颁发机构获得证书。 他们向我们发送了4个文件和.P12文件的密码: .csr、.cer、.key、.P12 以下是我所做的: *将JBoss配置为在8443上使用SSL,并将P12文件用作密钥库 为了测试这一点,我做了一个小Java类,该类调用此服务器上的webservices,使用: props.s

嗨,我有点迷路了,希望你能带我离开这里。我将尽可能清楚,因为我并不真正理解/知道如何使用证书

我有一个应用程序,它应该使用webservices和SSL与另一个应用程序通信。我们都要求我们的主要证书颁发机构获得证书。 他们向我们发送了4个文件和.P12文件的密码: .csr、.cer、.key、.P12

以下是我所做的: *将JBoss配置为在8443上使用SSL,并将P12文件用作密钥库 为了测试这一点,我做了一个小Java类,该类调用此服务器上的webservices,使用:

props.setProperty("javax.net.ssl.trustStore", "/.../.../certif.p12");
props.setProperty("javax.net.ssl.trustStorePassword", "XXXXXXXXX");
props.setProperty("javax.net.ssl.trustStoreType", "PKCS12");
连接正常,但我想我遗漏了一些东西,因为我没有使用其他文件。 如果我将我的.P12文件和密码发送到应该调用我的Web服务的应用程序,它是否可以/足够

编辑: 我忘了提到我也应该在另一个应用程序上调用Webservice,所以应该是另一种方式,我只需要一个.P12和pass吗

我读了很多关于公钥、私钥和keytool的书,但现在我的脑子里有点乱。 谢谢你提供的任何信息

我有一个应用程序应该与另一个应用程序通信 一个使用webservices和SSL

好的,停在这里。如何沟通?我的意思是,它只是服务器身份验证,即您的客户端应用程序将对web服务进行身份验证或相互身份验证,并且web服务也将请求您的应用程序证书

这一点很重要,因为您以名称显示的文件似乎暗示了后者,即,当您显示的代码仅为服务器身份验证设置SSL库时,需要进行相互身份验证

由于您在这里没有提供上下文,我想说:

.key有您的私钥 .p12将您的私钥与签名证书或CA的根证书一起保存 cer可以有您的签名证书,也可以是根用户的CA 在域和中被视为受信任的签名证书 可能还签署了要与之通信的web服务 这是一种可能性/猜测,因为你不知道 多说 csr是您的证书签名请求 我使用

您在代码中所做的是将p12设置为信任库

如果您说这是可行的,那么就没有相互身份验证,只有服务器端身份验证,您正在使用p12中的任何内容对web服务进行身份验证

在这种情况下,通信不需要其他文件。您需要保留密钥文件,尤其是密钥文件,因为这可能是您的私钥,如果您丢失/有人窃取了此密钥,则您的私钥将无效/受损

我不确定你对安全性的要求是什么,但在我看来,你可能应该更仔细地研究一下

即使是这个问题,我也只是试图根据文件名做一个有根据的猜测

我希望这能让你进入阅读的轨道

他们向我们发送了4个文件和.P12文件的密码:.csr、.cer、, .key,.P12

理想情况下,您应该自己在.key中生成私钥,在.CSR中生成CSR,CA应该根据CSR返回.cer中的证书,您可以将其组装在一起以构建PKCS12文件.p12

在此阶段,您可以放弃CSR。PKCS12文件现在应该包含私钥、其关联的证书以及可能附加的证书链。您可以稍后再次从该.p12文件中提取.key和.cer文件。我猜您之所以得到所有这些文件,是因为它们是使用中间文件生成的,或者为了方便起见,不必自己转换它们

Java术语并不理想,但keystore和truststore是keystore类型的两个实体,但用途不同。KeyManager和TrustManager之间以及javax.net.ssl.keyStore和javax.net.ssl.trustStore之间的区别如下:

TrustManager:确定是否应信任远程身份验证凭据和连接

KeyManager:确定要发送到远程主机的身份验证凭据

javax.net.ssl.trustStore*属性是配置TrustManager的一种方法。javax.net.ssl.keyStore*属性是配置KeyManager的一种方法

通常,信任存储中不需要私钥材料,除非您也将其用作密钥存储。通常最好使用单独的信任库,这样您就可以在机器上自由复制,而不用担心私钥材料泄漏。 有意义的是使用CA证书构建一个新的密钥库JKS,您可以将其用作信任库,但不确定您是否已获得这些证书

你没有做相互认证 通过仅设置信任库,密钥库没有默认值,因此它们需要显式指定这些参数。如果要使用客户端证书连接到远程方,则需要在密钥库中设置它,例如,使用javax.net.ssl.keystore*属性,方法与对信任存储所做的相同


您可以将密钥库和信任库指向同一个.p12文件。副作用是您的服务与其他地方建立了其他连接,例如https://www.google.com 不会被信任,因为它不会包含这些的CA。这就是为什么最好创建一个单独的信任库密钥库JKS对于CA证书来说可能更容易。您可以在JRE目录中复制默认的CACERT,将您的CA证书导入其中并使用它。

例如,您可能想了解更多有关keystore和truststore之间的区别的信息。非常感谢您的评论,这非常有帮助。如果我使用密钥库和信任库作为.P12文件,我必须使用.P12密码将其提供给客户机?由于.P12文件包含私钥,这不是有点危险吗?事实上,您必须给他们密码,从而给他们私钥:当然,这是您应该避免的。我建议建立一个单独的JKS存储,只使用CA证书,而不是您的证书或其私钥。我怀疑那些证书在你的.cer文件中可能只是你的证书,没有链,但是完整的链可能在.p12文件中。您还应该能够很容易地从CA本身获得CA证书。然后,使用keytool-import将其导入到一个新的密钥库中。非常感谢,在阅读了您的回复后,我做了很多事情,但它给了我一个很好的方法。感谢您的评论,在更多阅读之后,我清楚地知道我应该使用相互身份验证。我在第2章找到了这个有趣的链接,但他们开始创建公钥/私钥对。由于已经有一个带有私钥的.key文件,如果这样做的话,我真的不知道如何创建关联的公钥。您的公钥在您的证书中