java - web服务提供者与消费者之间的java证书机制

  显示原文与译文双语对照的内容
95 3

服务器和客户机将ssl证书机制放置在web服务调用中的具体步骤是什么?Who(client/server/both) 将生成。keystore,。p7b/。cer文件?我谷歌了很多但却找不到答案。对于我来说,我是运行一个java应用程序的客户机,它使用。web服务提供程序提供了一个. p7b 文件。我知道在哪里放置文件( 。. cer,) 以及如何在应用程序中使用它。

但是我的问题是

  • 我需要生成密钥存储文件还是应该从web服务提供程序获取它?如果我需要生成?是否需要 private 密钥/密码短语?
  • 我需要一个. cer 文件,我如何使用keytool将. p7b 转换为. cer 文件?

感谢你的帮助。

时间:原作者:0个回答

132 0

看起来你正在调用一个web服务,它的中HTTP连接是使用ipqos证书的tls/ssl进行的。这意味着服务器已经使用这些证书和相应的private 密钥设置了密钥库。调用web服务时,服务器将从它的密钥库检索用于信任建立( 也就是说,为了保护TLS连接到web服务)的证书,并将它的发送到客户端。客户端收到来自服务器的响应时,它将检查该证书的信任。现在我们有两种方案:

如果服务器使用自签名证书( 可以用于开发和测试,但不能用于生产),那么客户端将不会将它的识别为可信的,因为它不存储在客户端的信任存储库中。默认情况下,在Java环境中,truststore在以下两个位置搜索( 按顺序):$JAVA_HOME/lib/security/jssecacerts使用 -Djavax.net.ssl.trustStore-Djavax.net.ssl.trustStorePassword 或者使用自定义 TrustManager 来运行客户端也可以使用定制的信任存储库。因此,如果服务器自签名证书未存储在这些位置之一,则安全连接将失败。所以客户端必须将证书导入它的信任存储库。为了避免将自签名证书导入客户端的信任存储,你可以在这里创建一个定制的X509TrustManager 作为状态

如果服务器使用由已经识别的root of签署的证书,那么它将被自动验证,因为这些of的证书已经安装。因此,可信TLS连接将成功。

在服务器不要求客户端身份验证的情况下,进程超过( 这就是通过浏览器连接大多数HTTPS网站时所发生的事情) 。

如果服务器需要客户端身份验证,那么客户机将需要向服务器提供自己的证书。web服务提供程序必须向客户端提供客户端应使用的证书配置文件的规范。

在这里,你可以找到一个很好的对密钥存储库的术语进行说明。

缺省情况下,在Java环境中,密钥存储库和信任存储库是JKS文件。

所以你说你有一个由网络服务提供商提供的. p7b 文件。的引用:

pkcs#7/p7b格式

PKCS#7或者P7B格式通常以Base64格式存储,并且具有. p7b 或者. p7c. commonname证书的文件扩展名包含"。-----begin pkcs7---- -"和"。-----end pkcs7---- -"语句。P7B文件只包含证书和链证书,而不包含 private 密钥。多个平台支持P7B文件,包括微软 Windows 和 Java Tomcat 。

that文件包含服务器证书或者证书链( 更多关于这个的信息。) 。

我相信你在no-client-auth场景里。因此,你不需要自己的密钥库。你只需要将服务器( P7B文件)的证书导入你正在使用的信任存储库中。无需将文件转换为CER格式,即可直接导入P7B文件:

keytool -import -trustcacerts -alias web_service -keystore my_truststore.jks -file web_service.p7b

在这种情况下,你仍然需要CER格式化证书,你可以像这里( 回答你的2nd 问题) 那样从P7B转换为 CER:

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer

实际上,需要使用 private 密钥和 public 证书,或者通过 -Djavax.net.ssl.keyStore-Djavax.net.ssl.keyStorePassword 参数创建密钥库,或者通过 KeyManager 来提供密钥库验证。先前解释的工作流现在在相反的方向上应用。

原作者:
...